如何在Java中检查匹配的括号?

时间:2014-03-03 22:31:23

标签: java parentheses postfix-notation infix-notation

对于我的家庭作业,我们应该使用堆栈在java中使用中缀和后缀制作计算器。当我从文件中读取方程时,有很多括号。我应该确保它们匹配,如果它们是空的,或者如果有匹配的括号,则显示错误消息。我不确定如何检查匹配的括号。任何代码或其背后的逻辑帮助都会有所帮助。我浪费了大量时间试图弄清楚这个家庭作业的一小部分。

输入文件包含: (((A + B) - (C - D))/(E - F))(((A)))(A)((A(BD)D))()(())(((A + B)))((A * B))(A / B)A * BA / B + CA ^(B - C)(((C ^ E)))D(A - B * C)A-B / C(A / B * C)(A - C ^ C)(A * C ^ C)(D / C ^ C)A - C ^ CA - B * C + D / EA * B - C ^ C ^ DAB - C ^ C ^ D((A - B * C)^ D ^ E)^(F / G * H + I)(A - B)*((C * D)+ E)((()( ())((((())))((()(()(((())))A *(B / C)+ D(A - B)A *(B / C)+ D ^ (A - B)A *(B / C)+ D ^ A - B

4 个答案:

答案 0 :(得分:2)

从逻辑上考虑一下。你怎么知道他们是否匹配?如果在开口支撑后有一个闭合支撑。

这是一个通用算法:

  • 如果遇到一个左大括号“(”,添加到堆栈
  • 如果遇到右括号“)”,则从堆栈弹出一个
  • 如果遇到右大括号,请小心检查堆栈大小。如果堆栈上没有任何内容,那么这也是一个错误。

一旦解析了文本,如果匹配的括号数量没有遇到错误,那么堆栈应该为空。

答案 1 :(得分:0)

使用堆栈 - 当您看到任何打开的括号时,将其推入堆栈,并在看到结束时从堆栈弹出。如果您尝试弹出但堆栈为空,则它不匹配。如果你没有更多的输入,但仍然有你的堆栈中的东西,这也意味着它不匹配

答案 2 :(得分:0)

尝试查看stack数据结构。它是 first-in-last-out 类型的结构,您可以按特定顺序存储多个元素,并始终以相反的顺序检索它们。

然后您可以扫描代码,每次找到左括号时,推入堆栈,当您找到结束时,弹出左括号出。当你到达代码的末尾时,堆栈应该是空的,你应该永远不会遇到这种情况,当你在空堆栈上弹出时,你知道括号是正确的。

答案 3 :(得分:0)

很简单。从输入文件中读取。
如果您已阅读'('将其添加到堆栈中 如果你已经读过')'偷看堆栈顶部的东西。

  • 如果堆栈为空,则引发错误。
  • 如果是'('然后从堆栈弹出,忽略char')'你刚读完,继续阅读。
  • 如果不是'('然后引发错误。
  • 如果您已阅读整个输入并且堆栈不为空,则引发错误。