使用扫描仪的RPN计算器,如果/ Else语句未读取

时间:2017-09-25 04:10:02

标签: java if-statement while-loop numberformatexception rpn

我正在使用一个非常简单的反向抛光记谱计算器,使用堆栈,并且在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();    

1 个答案:

答案 0 :(得分:0)

nextLine()的{​​{1}}方法读取下一行。如果您不止一次调用它,它将读取多行。所以这句话:

Scanner

以下是它的作用:

  1. 读取一行,并测试它是否等于 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())); } 。如果不是:
  2. 读取另一个行,并测试第二行是否等于"+"。它不测试它针对"-"测试的同一行 - 它测试 next 行。如果不是"+"
  3. 读取另一条行......你明白了。
  4. 解决方案:读取行一次并将结果保存在变量中。 (我不知道这是否能解决整个问题。但你肯定需要解决这个问题。)