【问题标题】:LinkedList of LinkedLists in java?java中链表的链表?
【发布时间】:2012-03-20 16:10:55
【问题描述】:

我正在尝试在 java 中实现一个堆栈,我希望能够返回返回错误的同伴的左括号的行和列。例如:

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

这应该会在编译时产生错误,我想返回的是一些错误,格式如下:

“错误:在第 2 行第 29 列找到了第 2 行第 23 列 '(',预期为 ')',但找到了 ''。”

这可以通过linkedLists 的linkedLIst 实现吗?或者其他工具是否更适合此应用程序。我希望 push()、pop() 和 peek() 方法保持恒定的行为。

谢谢

【问题讨论】:

  • @alfasin 这与 eval 等效项无关。该问题专门询问如何使用堆栈来实现这一点,而不是依赖外部 JavaScript 引擎。
  • @AdamMihalcin 抱歉 - 这不是我所理解的。他说他正在尝试实现堆栈以检测右括号。但他没有说他必须使用堆栈来做到这一点!
  • @alfasin 是的,但我知道我不想依赖外部工具为我生成错误消息。如果我确实需要违规字符的行和列,我宁愿自己生成,而不必解析错误消息的内容。尤其如此,因为错误消息通常不被视为公共 API 的一部分,并且可能会在库版本之间发生变化。

标签: java list linked-list stack


【解决方案1】:

使用内置的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>。然后,当您在文件中移动时,可以将左大括号压入堆栈,并在到达每个右大括号时,确保它是堆栈顶部大括号的右大括号。如果不是,则您已经在错误消息中存储了要打印的行和列。

【讨论】:

  • 非常感谢,简单的解决方案就在我的面前,我把它复杂化了……doh!
猜你喜欢
  • 2012-06-18
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 2018-05-05
  • 1970-01-01
  • 2013-11-22
相关资源
最近更新 更多