java - 如何正确抛出异常

标签 java

我是 java 新手,我正在尝试解决程序中可能出现的错误。我正在创建一个计算器并将输入从中缀转换为后缀以计算结果。我想尝试解决输入中不匹配的括号,但我遇到了麻烦。例如,当从中缀转换为后缀时,当到达 ) 时,它将从堆栈中弹出数字并将它们放入新的后缀列表中。在一种情况下,可能不存在匹配的左括号(while 循环到达堆栈末尾而没有遇到 (),它应该抛出异常。我已经实现了以下代码,但它似乎不起作用:

    else if(tok.equals(")")){
      while(stack.peek().equals("(") == false){
        try{
          Operator o = stack.pop();
          nlist.add(o);                
        } catch(EmptyStackException e){
          System.out.println(e.getMessage());
        }
        stack.pop();
      }    

然后在构建 GUI 并处理输入的另一个文件中,我输入:

try{
  java.util.List<Token> postfix = ExpressionManager.infixToPostfix(infix);
  // build the expression
  Expression exp = ExpressionManager.buildExpression(postfix);
  // display the results
}catch(ArithmeticException e){
     entryField.setText(e.getMessage())
}

有什么建议吗?

最佳答案

stack.peek() 在进入 try-catch block 之前抛出 EmptyStackException (我假设您期望 pop 会抛出异常)。

第二个 block 没有显示如何抛出ArithmeticException,因此,不确定您在这里期望什么。

关于java - 如何正确抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32874895/

相关文章:

java - 如何使用子查询.in

java - 实体无法解析为类型

java - 如何实现无损 grpc-streaming 调用?

java - 在 Java Swing 中前置组件?

java - 在后台跟踪网页

java - 如何同时显示模式和执行操作

javascript - 当canvas.width/height太大时canvas.toDataUrl返回 "data:;"

java - 是否有一个允许单键到多值关系的java集合?

java - 在 Oracle JDBC 客户端中指定密码哈希而不是清除密码

java - 如何在降序排列的数组中进行二分查找?