简体   繁体   English

检查(表达式中的[和{是否正确?

[英]Checking for correct number of ( [ and { in expressions?

I am trying to write a program for an assignment for my java class. 我正在尝试为我的java类分配一个程序。 The program is supposed to use Tokenization and the Stack class to check for correct balance of brackets, braces, and parenthesis in expressions. 该程序应该使用Tokenization和Stack类来检查表达式中括号,花括号和括号的正确平衡。

What am i doing wrong? 我究竟做错了什么?

My code 我的密码

   import java.util.*;
   public class Lab10 {
   public static void main(String[] args) throws Exception {
        Stack<String> stack = new Stack<>();        
        Scanner input = new Scanner(System.in);
        System.out.print("Enter string: ");
        String s = input.nextLine();
        input.close();      
        StringTokenizer tokens = new StringTokenizer(s, "[] () {}", true);
        while (tokens.hasMoreTokens()) {
            String token = tokens.nextToken().trim();
            if (token.compareTo("(") == 0 || token.compareTo("{") == 0 ||
                 token.compareTo("[") == 0) {
                stack.push(token);
            }

            else if (token.compareTo(")") == 0 || token.compareTo("}") == 0        ||
                token.compareTo("]") == 0) {
            String popped = stack.pop();

            if (token.compareTo(")") == 0 && popped.compareTo("(") != 0 ||
                token.compareTo("}") == 0 && popped.compareTo("{") != 0 ||
                token.compareTo("]") == 0 && popped.compareTo("[") != 0) {
                System.out.println("Error");
            }
        }

    }

    }
    }

As suggested by @Eran , these could be some good changes to the code : 正如@Eran所建议的,这些可能是对代码的一些很好的更改:

if(stack.empty()) {
    System.out.println("Error");
    break;
}
String popped = stack.pop();
if (token.compareTo(")") == 0 && popped.compareTo("(") != 0 || token.compareTo("}") == 0 && popped.compareTo("{") != 0 || token.compareTo("]") == 0 && popped.compareTo("[") != 0) {
    System.out.println("Error");
    break;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM