对于我的家庭作业,我们应该使用堆栈在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
答案 0 :(得分:2)
从逻辑上考虑一下。你怎么知道他们是否匹配?如果在开口支撑后有一个闭合支撑。
这是一个通用算法:
一旦解析了文本,如果匹配的括号数量没有遇到错误,那么堆栈应该为空。
答案 1 :(得分:0)
使用堆栈 - 当您看到任何打开的括号时,将其推入堆栈,并在看到结束时从堆栈弹出。如果您尝试弹出但堆栈为空,则它不匹配。如果你没有更多的输入,但仍然有你的堆栈中的东西,这也意味着它不匹配
答案 2 :(得分:0)
尝试查看stack数据结构。它是 first-in-last-out 类型的结构,您可以按特定顺序存储多个元素,并始终以相反的顺序检索它们。
然后您可以扫描代码,每次找到左括号时,将推入堆栈,当您找到结束时,弹出左括号出。当你到达代码的末尾时,堆栈应该是空的,你应该永远不会遇到这种情况,当你在空堆栈上弹出时,你知道括号是正确的。
答案 3 :(得分:0)
很简单。从输入文件中读取。
如果您已阅读'('将其添加到堆栈中
如果你已经读过')'偷看堆栈顶部的东西。