gpt4 book ai didi

Java Postfix 计算器错误

转载 作者:行者123 更新时间:2023-11-30 02:47:59 25 4
gpt4 key购买 nike

我正在使用堆栈在 java 中创建后缀计算器。我已经写好了主要部分,但我遇到了一些问题。对于初学者来说,我必须考虑空白,而且我不知道如何在当前的设置下做到这一点。我不确定这是否会完全修复该程序,但这将是一个开始。任何帮助将不胜感激。

 import java.util.Scanner;
import java.util.Stack;
public class Postfix
{
public static void main(String[]args)
{
Scanner sc = new Scanner(System.in);
System.out.println("Enter a Postfix expression");
String input = sc.nextLine();
Stack<Integer> Pstack = new Stack<Integer>();
int result = 0;
for(int i=0; i<input.length();i++)
{
char ch = input.charAt(i);

if(ch>='0' && ch<='9')
{
Pstack.push((int)(ch-'0'));
}
else
{
int o1 = Pstack.pop();
int o2 = Pstack.pop();

switch(ch)
{
case '+':result=o1+o2;
break;
case '-':result=o1-o2;
break;
case '/':result=o1/o2;
break;
case '*':result=o1*o2;
}
}
Pstack.push(result);
}
result = Pstack.pop();
System.out.println("result: "+ result);
}
}

最佳答案

正如评论中提到的,放入

if(ch == ' ') continue; 

紧接着

char ch = input.charAt(i);

这将解决空白问题。

另一个问题是

Pstack.push(result);

每次都会执行,而不仅仅是在评估运算符时执行。

因此该语句应该是“else”情况下的最后一个语句。

您还必须更正从堆栈中弹出参数的方式。

例如如果您有后缀表达式 12- (其计算结果应为 -1),2 在堆栈顶部,1 在堆栈后面。在当前的解决方案中,结果将为 2 -1,因为参数以错误的顺序检索。

所以

int o1 = Pstack.pop();
int o2 = Pstack.pop();

应更正为

int o2 = Pstack.pop();
int o1 = Pstack.pop();

关于Java Postfix 计算器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39584671/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com