2016-08-01 5 views
-2

그래서 사용자가 .java 파일을 입력하고 파일의 대괄호, 괄호 및 중괄호가 균형을 이루고 있는지 확인하고 있습니다. 그리고 "balanced"를 출력하고 "balanced"가 아닌 경우 코드를 모두 작성했지만 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; 

     } 


    } 
+3

읽기 쉽지 않은 스타일. 디버거를 빨리 돌리면 여기에 묻는 것보다 빨리 잘못 읽었을 것입니다. – duffymo

+1

불균형 대괄호 또는 괄호를 처음 감지 할 때 검사를 계속할 필요가 없습니다. 또한 'istrue'와 같은 이름은 실제로 설명 적이 지 않습니다. 실제로 변수가 사용되는 의미와 그 의미를 나타내지는 않습니다. –

답변

0

여러분의 프로그램은 너무 빨리 결정하지 않고,이 모든 것이 끝나면 가 제대로 결정하지입니다.

이 식을 고려에 무슨 일이 일어나고 있는지 확인하려면 :

((x+y) 

프로그램이 괄호 명확 불균형에도 불구하고, true를 반환합니다. 균형 상태가 스택이 비 었는지 확인해야하기 때문입니다.

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