我已经编写了一个类来对基本算术运算符进行后期修复计算 - 代码如下。
public class PostFixCalculatorRPN
{
public static void main()
{
String input = JOptionPane.showInputDialog("PostFix expression: ");
Stack s = new Stack();
for (int i = 0; i < input.length(); i++)
{
char ch = input.charAt(i);
if (ch == '+' || ch == '-' || ch == '*' || ch == '/')
{
// pop 2 numbers off and operate
switch (ch)
{
case '+':// push the sum of the 2 numbers back on stack
case '-': // push the difference of the 2 numbers back on stack
case '*': // push the product of the 2 numbers back on stack
case '/':// push the quotient of the 2 numbers back on stack
}
} else
s.push(ch + "");
}
int answer = Integer.parseInt((String) s.pop());
System.out.println(printInput(input) + ": Evaluates to -> " + answer);
System.exit(0);
}
public static String printInput(String s)
{
String str = "";
for (int i = 0; i < s.length(); i++)
str += s.charAt(i);
return str;
}
}
我相信我所拥有的Stack
课程可以正常使用,但如果有必要我也可以发布。
我的计算器的输出不符合预期,例如53+
的输入评估为3
而92*
评估为2
,而我期待8
分别为1}}和18
。
答案 0 :(得分:0)
你拥有的一切都非常接近,但在你的case语句中没有代码,它只会返回输入字符串中的最后一个非运算符(最后一项被压入堆栈)。你完全理解你拥有的代码和堆栈是什么吗?您通过输入从左到右步进并将数字推入堆栈,直到您按下操作员(+ - * /)然后将操作符应用于您方便地在堆栈上推送的数字。这些数字按照您按下它们的相反顺序弹出。您应该只需要从堆栈中弹出两个数字,然后执行所需的操作并推送结果。类似的东西(重复使用代码中的部分):
s.push(Integer.parseInt((String)s.pop()) + Integer.parseInt((String)s.pop()) + "");
由于流行音乐的订购,其中一个运营商会略显棘手。试想一下。