Java 后缀计算器错误
Java Postfix Calculator Error
我正在使用堆栈在 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 中创建后缀计算器。我已经写完了主要部分,但是我遇到了一些问题。对于初学者,我必须考虑空格,我不确定如何使用我当前的设置来做到这一点。我不确定这是否会完全修复该程序,但这将是一个开始。任何帮助将不胜感激。
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();