gpt4 book ai didi

Java - For 循环在一次迭代后停止

转载 作者:行者123 更新时间:2023-12-01 11:10:49 26 4
gpt4 key购买 nike

我一直在编写一个简单的 JFrame 程序来求解基本数学方程,该程序采用 5 个值(其中最多两个可能为空),识别正确的方程并计算空值。下面的这部分代码采用 hashmap 中的 5 个值,由字符串 (V,U,S,A,T) 标识,标识哪些值为 null,并将它们添加到一个单独的数组 (nullvalues) 中,然后迭代该数组(nullValueLoop) 来确定合适的方程并求解未知数。

问题出现在 nullValueLoop 中,它似乎只迭代一次,在第一次迭代后突然停止。

我在尝试调试时添加了很多 system.out,并包含了控制台输出以希望显示正在发生的情况。调用的异常来自另一个类(随着程序继续)尝试调用第二个 null 值并发现它为 null。

希望我已经解释得很好,非常感谢任何帮助。

   public void calculate() {

// Stores the keys to reference the null values in HashMap<Double> values;
ArrayList<String> nullvalues = new ArrayList<String>();


for(String tempKey : values.keySet()){
if(values.get(tempKey)==null){
nullvalues.add(tempKey);
System.out.print("Found null value " + tempKey + ", adding to array. \n");
}
}

System.out.print("Beginning loop of nullvalues, of size " + nullvalues.size() + "\n");

nullValueLoop:
for(String nullvalue : nullvalues){



System.out.print("Starting outerloop, iterating nullvalue " + nullvalue + "\n");

EquationLoop:
for(Equation e : registeredEquations){

// Flag to keep ` of if we have any unknowns yet
boolean foundUnknown = false;

// Iterate through the values required
// If the loop does not exit, the equation only requires one of our null values and the program continues.
for(String s : e.getRequiredChars()){

// If we have a null value and havent yet had one, all is good
if(nullvalues.contains(s) && foundUnknown == false){
foundUnknown = true;

// We have more than one null value, abort
} else if(foundUnknown == true && nullvalues.contains(s)){
continue EquationLoop;
}
}


System.out.print("Using equation " + e.getIdentifier() + "\n");

System.out.print("Found suitable equation.\n");

Double returnValue = e.calculate(values, nullvalue);

System.out.print("Calculated return value.\n");

values.put(nullvalue, returnValue);

nullvalues.remove(nullvalue);

System.out.print("Added new value to values array\n");
System.out.print("Calculated value " + nullvalue + " to " + values.get(nullvalue) + "\n");
break EquationLoop;
}
System.out.print("Ending outerloop iteration \n");
}
mainWindow.updateTextBoxes();

}

控制台输出:

Couldn't load value T | Assigning to null 
Couldn't load value A | Assigning to null
Found null value T, adding to array.
Found null value A, adding to array.
Beginning loop of nullvalues, of size 2
Starting outerloop, iterating nullvalue T
Using equation 3
Found suitable equation.
Calculated return value.
Added new value to values array
Calculated value T to 10.0
Ending outerloop iteration
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at uk.co.ElliotPurvis.MainWindow.updateTextBoxes(MainWindow.java:143)
at uk.co.ElliotPurvis.Main.calculate(Main.java:136)
at uk.co.ElliotPurvis.MainWindow.actionPerformed(MainWindow.java:118)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
Process finished with exit code 0

最佳答案

EquationLoop内部,您正在修改列表nullvalues,该列表正在由外部循环迭代。这是未定义的行为,您不允许在迭代过程中修改集合。

我很惊讶你没有得到ConcurrentModificationException

关于Java - For 循环在一次迭代后停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32407627/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com