运行时错误:循环停止而没有完全执行循环

时间:2018-10-24 01:42:36

标签: java

我的代码需要帮助。它有一个运行时错误,其中循环仅在中途停止...我做了一些检查,发现它只循环直到外循环的中间部分。我做了一个“塞子”,每次将一个术语添加到数组列表时,大小都会发生变化,因此新术语将再次被检查<-这是原因吗?塞子是否应该始终保持恒定状态?

无论如何,请就如何改进代码提出您的建议。 代码是:

public void mainOperation() {
    for(int i = 0; i<mainRec.size(); i++) {
        int marker = 0;
        int sizeC = mainRec.size();
        for(int k = i+1; k<sizeC; k++) {
            String var1 = elementBinValue(mainRec.get(i));
            String var2 = elementBinValue(mainRec.get(k));


            if(compareTo(var1, var2)==1) {
                marker++;
                mainRec.add(mainRec.get(i) + " " + mainRec.get(k));
                System.out.println("CHECKER: " + mainRec.get(i) + "-" + mainRec.get(k));
            }
        }
        if(marker==0)
            markedP.add(mainRec.get(i));
    }
}

编辑:为了更直观地展示,我将在此处添加elementBinValue()和compareTo()方法

public String elementBinValue(String input) {                   //gets the bin value of the whole element
    StringTokenizer element = new StringTokenizer(input);
    String firstElement = toBinary(Integer.parseInt(element.nextToken()));      
    if(element.countTokens()==0) {                                              //RETURNS the whole elements' String value (1 String)
        return firstElement;
    }
    else {
        String newElement = "";
        while(element.hasMoreTokens()) {
            String compBin = toBinary(Integer.parseInt(element.nextToken()));
            int iterator = 0;
            while(iterator<firstElement.length()) {
                if(firstElement.charAt(iterator)==compBin.charAt(iterator))
                    newElement += firstElement.charAt(iterator);
                else
                    newElement += "-";
            }
        }
        return newElement;
    }
}
public int compareTo(String a, String b) {//returns 1 if they can be grouped else 0
    int counter = 0;
    int iterator = 0;
    //String newElement = "0";

    while(counter<2 && iterator < 8) {//The number 8 is for the binary size
        if((a.charAt(iterator))!=((b.charAt(iterator))))
            counter++;
        iterator++;
    }
    if(counter<2)
        return 1;
    else return 0;
}

0 个答案:

没有答案