0
我一直在編寫一個簡單的JFrame程序來解決基本的數學方程,程序需要5個值,其中最多兩個可能爲空,標識正確的方程並計算空值。下面的這段代碼用一個字符串(V,U,S,A,T)標識了一個hashmap中的5個值,標識哪些值爲null,並將它們添加到一個單獨的數組(nullvalues)中,然後迭代(nullValueLoop)來確定一個合適的方程並解決未知問題。Java - for循環在一次迭代後停止
問題出現在nullValueLoop中,它只出現一次迭代,在第一次迭代之後突然停止。
我在嘗試調試時添加了很多system.out,並且包含控制檯輸出以希望顯示正在發生的事情。所調用的異常來自另一個類(隨着程序的繼續)嘗試調用第二個空值並將其發現爲空。
希望我已經解釋了這一點,任何幫助,非常感謝。
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
請包括'MainWindow.updateTextBoxes()'的代碼並在該代碼中指出143行。 – gla3dr
您是否閱讀過錯誤信息? – Dici
向下/關閉選民,請閱讀整篇文章。 NPE似乎是偶然的(或隨後的錯誤)。 OP詢問爲什麼'初始循環的nullvalues,大小爲2,但循環只執行一次,然後退出調用'updateTextBoxes()' –