首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在for循环的条件语句中使用vector.size()时的无限循环

在for循环的条件语句中使用vector.size()时的无限循环
EN

Stack Overflow用户
提问于 2015-03-09 01:38:06
回答 1查看 217关注 0票数 0

我实现了桶排序,并使用插入排序对每个桶进行排序。但是当我运行代码时,它进入了一个无限循环。调试后,我发现for循环正在无限地运行。

代码语言:javascript
复制
// we have buckets for each intervals
// we add values into each bucket 
// each bucket is then sorted at the end
// then all the buckets are merged together
public class BucketSort {


@SuppressWarnings("unchecked")
private Vector<Double>[] buckets = new Vector[10];


private int sizeOfInput;

//constructor

public BucketSort(int size){
    sizeOfInput = size;
    for(int i=0; i<10;i++){
        buckets[i] = new Vector();

    }

}


public static void main(String args[]){
    Double[] arr =  {0.11,0.12,0.21,0.61,0.7,0.5,0.14,0.2,0.61,0.65,0.72,0.80,0.98,0.82,0.96,0.35,0.47,0.53};

    BucketSort s = new BucketSort(arr.length);

    Vector result = s.bucketSort(arr);
    System.out.println("The result is : ");

    for(int i= 0;i< result.size();i++){
            System.out.println(result.get(i));
    }
    //s.printBucket();
} 

public void printBucket(){
    // prints out the elements in each bucket 
    for(int i = 0; i<10;i++){
        System.out.println("The bucket "+ i + " contains these elements");
        for(int j=0; j<buckets[i].size();j++){

                System.out.println(buckets[i].get(j));
        }
    }
}


public Vector bucketSort(Double[] arr){
    // add the elements in appropriate buckets
    for(int i = 0; i<arr.length;i++){
        for(int j=0; j<10;j++){
            if(arr[i] < (double)(j+1)/10){
                buckets[j].add((double)arr[i]);
                break;
            }
        }
    }

    // print out each bucket
    printBucket();

    // call the sort function on each of the buckets
    for(int i= 0 ; i< 1; i++){

        sort(1);
        System.out.println("Sorted bucket" + i);
    }


    return merge();
}

public void sort(int number){

    //binary sort each values of vector
    System.out.println("bucket" + number + "size is " + buckets[number].size());
    int k = buckets[number].size();

    for(int i = 1; i < (buckets[number].size()); i++ ){
        System.out.println("Bucket" + number + "element" + i);

        double a = buckets[number].get(i); 
        int j= i;
        while(j > 0 && buckets[number].get(j-1) > a){
                //double b = buckets[no].get(j-1);
                //buckets[no].add(j,b);
                j--;
                System.out.println("Sorting bucket" + number);
        }

        buckets[number].add(j,a);           

    }
}

public Vector merge(){
    //merge all the bucket vectors into an array
    Vector<Double> result = new Vector();

        for(int j=0;j<10;j++){
            //buckets[j].copyInto(result);
            result.addAll(buckets[j]);
        }

    return result;
}   

}

如果我换掉

代码语言:javascript
复制
for(int i = 1; i < (buckets[number].size()); i++ ){

使用

代码语言:javascript
复制
for(int i = 1; i < k; i++ ){

其中k= bucketsnumber.size()

这解决了问题,但我不明白为什么会出现错误。请解释这种不适当行为的原因。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-09 01:40:02

你在循环中加入桶,这增加了它的大小。循环条件在每次执行循环之前被重新评估.

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28934028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档