我正在使用一个非常简单的反向抛光记谱计算器,使用堆栈,并且在while循环中遇到if / else语句的问题。其余的代码工作正常,但我在else行后继续得到NumberFormatException。我认为这意味着当输入为" *"时,它没有按照if语句中的说法去做,但我不知道如何解决这个问题。如果输入等于指定字符之一,为什么会转到else?我对提高代码效率不感兴趣,如果可能的话我想保留我的格式,但我很困惑。非常感谢你的帮助。
try {
Scanner stackScanner = new Scanner(stackFile);
while (stackScanner.hasNextLine()) {
String pls = "+";
String min = "-";
String mul = "*";
String div = "/";
String mod = "%";
String exp = "^";
//stackScanner.nextLine();
if(stackScanner.nextLine().equals(pls) ||
stackScanner.nextLine().equals(min) ||
stackScanner.nextLine().equals(mul) ||
stackScanner.nextLine().equals(div) ||
stackScanner.nextLine().equals(mod) ||
stackScanner.nextLine().equals(exp)) {
stack.push(new operationNode(stackScanner.nextLine()));
}
else {
stack.push(new
numberNode(Double.parseDouble(stackScanner.nextLine())));
}
}
stackScanner.close();
答案 0 :(得分:0)
nextLine()
的{{1}}方法读取下一行。如果您不止一次调用它,它将读取多行。所以这句话:
Scanner
以下是它的作用:
if(stackScanner.nextLine().equals(pls) ||
stackScanner.nextLine().equals(min) ||
stackScanner.nextLine().equals(mul) ||
stackScanner.nextLine().equals(div) ||
stackScanner.nextLine().equals(mod) ||
stackScanner.nextLine().equals(exp)) {
stack.push(new operationNode(stackScanner.nextLine()));
}
。如果不是:"+"
。它不测试它针对"-"
测试的同一行 - 它测试 next 行。如果不是"+"
:解决方案:读取行一次并将结果保存在变量中。 (我不知道这是否能解决整个问题。但你肯定需要解决这个问题。)