我已經編寫了一個程序,它接受輸入(用戶鍵入或通過文本文件處理),並根據找到的內容調用數學計算。調用line.isEmpty()方法時輸出重複的答案
問題一旦出現答案並打印出來,每line.isEmpty()
掃描儀檢測到它將重新計算並打印出以前的答案。如果有4個空行,它將被打印4次,直到將另一個問題解析到程序中。
這是我的主要方法:
public static void main(String[] args) {
Calc calc = new Calc();
Scanner sc = new Scanner(System.in);
StringBuilder sb = new StringBuilder();
String input = "";
List<String> strs = new ArrayList<>();
//
ArrayList<String> tokens;
//this makes sure an entire problem is added as a tokens element
while (sc.hasNextLine()) {
String line = sc.nextLine().trim();
if (line.isEmpty()) {
for (String s : strs) {
sb.append(s);
input = sb.toString();
}
tokens = new ArrayList<>(Arrays.asList(input.split(" ")));
//call calculate on strs then reset
calc.calculate(tokens);
strs.clear();
tokens.clear();
sb.setLength(0);
} else if (line.length() == 1) {
strs.add(" ");
strs.add(line);
strs.add(" ");
} else {
strs.add(line);
}
}
}
和計算方法:
public String calculate(List<String> tokens) {
operands = new Stack<>();
for (int i = 0; i < tokens.size(); i++) {
tokens.removeAll(Arrays.asList(""));
}
String result = processOperands(tokens);
if (result.equals(null)) {
System.out.println(result);
return defaultResult;
} else if (result.equals("java.lang.IllegalArgumentException: Attempting to add with fewer than 2 operands.")) {
System.out.println(result);
return "java.lang.IllegalArgumentException: Attempting to add with fewer than 2 operands.";
} else {
System.out.println(result);
return result.replaceAll("[^\\d.]", "");
}
}
對於輸入:
2 2 +
4
3 +
輸出:
4
4
4
7
很明顯,問題在於我每次檢測到一個空字符串時都會調用它,因爲當前它是如何知道問題何時完成的「輸入」。
我該如何修改這個要麼知道不打印相同的答案兩次,要麼不計算答案,直到找到另一個答案?
這已經在代碼中。 'calc.calculate(令牌); strs.clear(); tokens.clear(); sb.setLength(0);' – Alkarin
到目前爲止,你已經做了什麼來弄清楚爲什麼會出現問題? – immibis