括号检查器实现堆栈

时间:2016-08-01 00:23:01

标签: java

所以我假设要接受用户输入的.java文件并检查文件的括号,括号和花括号是否平衡。输出"平衡'如果不是"不平衡'我已经写出所有代码,但我的stackBalance方法没有正确检查。我告诉它正在回归"余额"任何比赛后输出。循环应该继续,直到没有要解析的内容并且堆栈不为空。基本上我的计划是决定"平衡"太快(在检查整个堆栈之前)。但我只是没有看到我搞砸了。快速修复将不胜感激!这是代码:

    public static String stackBalance(Scanner in){
        if(!in.hasNext()){
            System.out.println("Nothing to see");
            }
        else{
            stack<Character> stack = new stack<Character>();
            Boolean istrue = true;
            String expr = in.next();
            for (int i = 0; i < expr.length(); i++)
               {
                   char c = expr.charAt(i);
                   if (c == '[' || c == '(' || c == '{')
                   {
                       stack.push(c);
                   }
                   if (c == '}' || c == ')' || c == ']')
                   {
                       if (stack.isEmpty())
                           istrue = false;

                       char last = stack.peek();
                       if (c == '}' && last == '{' || c == ')' && last == '(' || c == ']' && last == '[')
                           stack.pop();
                       else 
                           istrue = false;
                   }

               }
            if (istrue)
              {
                  System.out.println("File is balanced");
              }
               else
                   System.out.println("File is not balanced");


                }
            return null;

        }


   }

1 个答案:

答案 0 :(得分:0)

你的程序没有太快决定,当一切都结束时 没有正确决定。

要了解正在发生的事情,请考虑以下表达式:

((x+y)

即使括号明显不平衡,您的程序也会返回true。这是因为平衡条件需要包括检查堆栈是否已清空:

if (istrue && stack.isEmpty()) {
    ... // ^^^^^^^^^^^^^^^^^^   
} else {
    ...
}