RPN PostFix 计算器输出不符合简单算术的预期
RPN PostFix Calculator output not as expected for simple arithmetic
我写了一个 class 来做 post 修复基本算术运算符的计算 - 代码如下。
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
class 可以正常工作,但如果需要,我也可以 post。
我的计算器的输出不符合预期,例如 53+
的输入计算结果为 3
,而 92*
的计算结果为 2
,而我期待的是8
和 18
分别。
你所拥有的一切都非常接近,但如果你的 case 语句中没有代码,它只会 return 输入字符串中的最后一个非运算符(最后一项压入堆栈)。您是否完全理解您拥有的代码以及堆栈是什么?您正在从左到右步进输入并将数字压入堆栈,直到您点击运算符 (+-*/),然后将运算符应用于您方便地压入堆栈的那些数字。这些数字以您推动它们的相反顺序弹出。您应该只需要从堆栈中弹出两个数字,然后执行所需的操作并推送结果。类似的东西(重用代码中已有的部分):
s.push(Integer.parseInt((String)s.pop()) + Integer.parseInt((String)s.pop()) + "");
由于 pops 的顺序,其中一位操作员会稍微有点棘手。想想看。
我写了一个 class 来做 post 修复基本算术运算符的计算 - 代码如下。
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
class 可以正常工作,但如果需要,我也可以 post。
我的计算器的输出不符合预期,例如 53+
的输入计算结果为 3
,而 92*
的计算结果为 2
,而我期待的是8
和 18
分别。
你所拥有的一切都非常接近,但如果你的 case 语句中没有代码,它只会 return 输入字符串中的最后一个非运算符(最后一项压入堆栈)。您是否完全理解您拥有的代码以及堆栈是什么?您正在从左到右步进输入并将数字压入堆栈,直到您点击运算符 (+-*/),然后将运算符应用于您方便地压入堆栈的那些数字。这些数字以您推动它们的相反顺序弹出。您应该只需要从堆栈中弹出两个数字,然后执行所需的操作并推送结果。类似的东西(重用代码中已有的部分):
s.push(Integer.parseInt((String)s.pop()) + Integer.parseInt((String)s.pop()) + "");
由于 pops 的顺序,其中一位操作员会稍微有点棘手。想想看。