2016-10-10 10 views
0

残高シンボルをチェックするためのコードです。 しかし、私がテスターに​​収まるようにしようとすると、 アンカーが正しく表示されません。例えばJavaの残高チェック

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.Scanner; 

public class BalanceCheck { 

private static Scanner in; 

public static void main(String[] args){ 
    if(args.length > 0){ 
     System.out.println(args[0]); 
     try { 
      in = new Scanner(new File(args[0])); 
      MyStack<Character> stack = new MyStack<>(); 
      String str; 
      char ch; 
      while(in.hasNext()){ 
       str = in.next(); 
       for(int i = 0; i < str.length(); ++i){ 
        ch = str.charAt(i); 
        if(ch == '(' || ch == '[' || ch == '{' || 
          (ch == '/' && i < str.length() - 1 && str.charAt(i+1) == '*')){ 
         stack.push(ch); 
        } 
        else if(ch == ')'){ 
         if(stack.isEmpty() || stack.pop() != ch){ 
          System.out.println(") is mismatched"); 
          return; 
         } 
        } 
        else if(ch == ']'){ 
         if(stack.isEmpty() || stack.pop() != ch){ 
          System.out.println("] is mismatched"); 
          return; 
         } 
        } 
        else if(ch == '}'){ 
         if(stack.isEmpty() || stack.pop() != ch){ 
          System.out.println("} is mismatched"); 
          return; 
         } 
        } 
        else if(ch == '*' && i < str.length() - 1 && str.charAt(i+1) == '/'){ 
         if(stack.isEmpty() || stack.pop() != '/'){ 
          System.out.println("*/ is mismatched"); 
          return; 
         } 
        } 
        else if(ch == '"'){ 
         if(stack.isEmpty() || stack.top() == '"'){ 
          if(!stack.isEmpty()) 
           stack.pop(); 
         } 
         else{ 
          stack.push(ch); 
         } 
        } 
       } 
      } 
      in.close(); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } 
    } 
    else{ 
     System.out.println("Command line argument is not provided.."); 
    } 
} 

} 

、私はこのテスターをコンパイルする場合、

/*this tests an unbalanced [ operator*/ 
public class Test1 { 


/* this is the main method */ 
public static void main(String[) args) { 
    String ghana = "hello"; 
    int test = testing(); 
} 

public int testing() { 
    /*checking this too */ 
    /* and this */ 
    return 1; 
} 


} 

それは不一致である[表示する必要があります。しかし、それは/ *が不一致であることを示しています。

私に解決策を教えてください。

そして、私は上記のコードのためにテスターファイルを作成しなければなりません。

このためにテスターをコードするにはどうすればよいですか?

おかげで、

答えて

0

は非常に最初の行で何が起こるかを考えてみて: /*this tests an unbalanced [ operator*/

あなたは「* /」をヒットすると、スタックの一番上に「[」をそこにあります。

コメントがあるときを追跡して、最後まですべてを無視できるようにする必要があります。

このような問題が発生した場合はいつでも、デバッガを使用する必要があります。