我编写了一个程序,它接受输入(用户输入或通过文本文件处理)并根据它找到的内容调用数学计算。
问题在于答案并将其打印出来,因为扫描仪检测到每个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
显然问题是我每次检测到一个空字符串时都会调用calculate,因为这是当前它是如何知道问题何时完成“输入”的。
我怎么能修改这个以知道两次不打印相同的答案,或者在找到另一个答案之前不计算答案?
答案 0 :(得分:1)
输入变量未在逻辑中重置。清除strs,令牌并重置“sb”之后。变量,设置输入=&#34;&#34 ;;