2012-03-02 10 views
1

私はJavaでスタックを実装しようとしていますが、エラーを返したコンパニオンのカッコの行と列を返すことができます。例えば:JavaのLinkedListのLinkedList?

「ERROR:行2列23 『(』 'が見つかり、と期待コンパイルした場合、これはエラーを生成する必要があり

public static foo() { 
    System.out.println ("foo" 
} 

、私が返すようにしたいことの形でいくつかのエラーがあります) '行2列29で、代わりに' 'が見つかりました。

これはlinkedListsのlinkedListsで可能ですか?あるいは、このアプリケーションのためには別のツールを使う方がいいでしょう。私はpush()、pop()、peek()メソッドを使って、一定の動作を保持したいと思います。

+0

ヒント:http://stackoverflow.com/questions/2605032/using-eval-in-java – alfasin

+1

@alfasinこれは 'eval'に相当しません。この質問は、特に外部のJavaScriptエンジンに頼るのではなく、スタックを使ってこれを実装することについて質問します。 –

+0

@AdamMihalcin申し訳ありません - これは私が理解したものではありませんでした。彼は閉じ括弧を検出するためにスタックを実装しようとしていると言いました。彼はそれをするためにスタックを使用しなければならないと言わなかった! – alfasin

答えて

2

はビルトインStackオブジェクトを使用していただきありがとうございます。ホイールを再開発し、独自のバージョンの標準ライブラリクラスを作成する必要はありません。比類のない括弧のための印刷エラーに関連したよう

は、私はクラス

public final class Brace { 
    private final char openBrace; 
    private final char closeBrace; 
    private final int row; 
    private final int col; 

    public Brace(char openBrace, int row, int col) { 
     this.openBrace = openBrace; 
     this.row = row; 
     this.col = col; 

     switch (openBrace) { 
      case '(': 
       closeBrace = ')'; 
       break; 
      case '{': 
       closeBrace = '}'; 
       break; 
      case '[': 
       closeBrace = ']'; 
       break; 
      default: 
       throw new IllegalArgumentException("Unsupported opening brace"); 
     } 
    } 

    public boolean isClosingBrace(char ch) { 
     return closeBrace == ch; 
    } 
} 

を作成し、あなたのプログラムでStack<Brace>を保つことをお勧めします。次に、ファイルを移動するときに、開いているブレースをスタックにプッシュして、それぞれのブレースに到達するたびに、スタックの上端にあるブレースの閉じブレースを確認します。そうでない場合は、エラーメッセージで印刷する行と列をすでに格納しています。

+0

大変ありがとう、私の顔の前で簡単な解決策がありました。 – Kristopher