前缀表示法-Java

前缀表示法-Java,java,prefix,notation,Java,Prefix,Notation,我的代码不计算前缀表示法中的操作数。如何修改它以计算前缀表示法中的操作数 填充堆栈,然后开始求值,而在扫描过程中遇到运算符时,应弹出操作数,计算结果(通过将遇到的运算符应用于操作数),并将结果推送到堆栈上。从右向左扫描。如果从左向右扫描,则算法不同。您可以在Polish notation的wikipedia页面上阅读这两种实现 你现在正在做什么: while (strToken.hasMoreTokens()) { String i = strToken.nextToken();

我的代码不计算前缀表示法中的操作数。如何修改它以计算前缀表示法中的操作数

填充堆栈,然后开始求值,而在扫描过程中遇到运算符时,应弹出操作数,计算结果(通过将遇到的运算符应用于操作数),并将结果推送到堆栈上。从右向左扫描。如果从左向右扫描,则算法不同。您可以在Polish notation的wikipedia页面上阅读这两种实现

你现在正在做什么:

while (strToken.hasMoreTokens())
{
   String i = strToken.nextToken();              
   char ch = ' ';
   ch = i.charAt(0);
   int operand;
   int operator;

   if(Character.isDigit(ch))
   {
       operand = Integer.parseInt(i);
       operandStack.push(operand);
   }
   else
   {
       operator = i.charAt(0);
       operatorStack.push(operator);
   }
}

while(operandStack.size() > 1)
{
   operandStack.push(operate(operandStack.pop(),
   operandStack.pop(), operatorStack.pop()));
}

resultTextField.setText(Integer.toString(operandStack.peek()));
您需要做什么(从右到左):


“代码不求值”不是问题描述。会发生什么?用什么输入?输出是什么?预期的和实际的?你为什么要在发布时发布这些信息?@EJP Input:+16 4+3 1:预期输出:80,实际输出:128请用这些信息更新你的问题,这样人们就不必阅读所有评论来了解全局。单元测试将在这里帮助你。
input: * + 16 4 + 3 1
operand stack: 16 4 3 1
operator stack: * + + 
pop + pop 3 pop 1 push 4
operand stack: 16 4 4 
operator stack: * +
pop + pop 4 pop 4 push 8
operand stack: 16 8
operator stack: *
pop * pop 8 pop 16 
result = 16 * 128
input: * + 16 4 + 3 1
push 1 push 3
operand stack: 1 3 
operator: +    (you don't need operator stack)
pop 1 pop 3 push 3+1 = 4
operand stack: 4
push 4 push 16 
operand stack: 4 4 16
operator + 
pop 16 pop 4 push 4+16 = 20
operand stack: 4 20
operator *
pop 20 pop 4 result 4*20 = 80