2012-03-02 96 views
1

我想在java中实现一个堆栈,我希望能够返回其同伴的返回错误的开放括号的行和列。例如:Java中LinkedList的LinkedList?

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

编译时,这应该产生一个错误,我想要回是在形式的一些错误:

“ERROR:行2列23‘(’发现,和预期“ )'在第2行第29列,但发现'',而不是。“

这是可能的链接列表linkedLIst?或者另一种工具会更适合这种应用。我希望push(),pop()和peek()方法保持一个不变的行为。

谢谢

+0

提示:http://stackoverflow.com/questions/2605032/using-eval-in-java – alfasin 2012-03-02 05:45:38

+1

@alfasin这与'eval'等价物无关。这个问题特别提到了使用堆栈来实现这一点,而不是依赖于外部JavaScript引擎。 – 2012-03-02 05:54:11

+0

@AdamMihalcin对不起 - 这不是我所了解的。他说他试图实现一个堆栈以检测右括号。但他没有说他必须使用堆栈来做到这一点! – alfasin 2012-03-02 06:17:10

回答

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

非常感谢你,简单的解决方案就在我面前,我过于复杂... doh! – Kristopher 2012-03-02 06:11:43