如何处理反向波兰符号计算器中的数字? import java.util.ArrayList; 导入java.util.LinkedList; 导入java.util.List; 导入java.util.Scanner; 导入java.util.Stack;
如何处理反向波兰符号计算器中的数字?如何处理反向波兰符号计算器中的数字? import java.util.ArrayList; 导入java.util.LinkedList; 导入java.util.List; 导入java.util.Scanner; 导入java.util.Stack;,java,postfix-notation,Java,Postfix Notation,如何处理反向波兰符号计算器中的数字? import java.util.ArrayList; 导入java.util.LinkedList; 导入java.util.List; 导入java.util.Scanner; 导入java.util.Stack; 公开课事后评估{ 静态扫描仪输入=新扫描仪(System.in); 静态字符串表达式; 静态堆栈calcStack=新堆栈(); 静态列表表达式列表=新的ArrayList(); 静态布尔标志=false; 公共静态void main(字符串
import java.util.ArrayList;
导入java.util.LinkedList;
导入java.util.List;
导入java.util.Scanner;
导入java.util.Stack;
公开课事后评估{
静态扫描仪输入=新扫描仪(System.in);
静态字符串表达式;
静态堆栈calcStack=新堆栈();
静态列表表达式列表=新的ArrayList();
静态布尔标志=false;
公共静态void main(字符串[]args){
System.out.print(“输入表达式:”);
while(flag==false){
expression=input.next();
System.out.println(“”);
expression=whiteSpaceRemover(表达式);
if(expression.substring(expression.length()-1)=“;”){
expressionList.add(表达式);
}else if(expression.substring(expression.length()-1)=“@”){
expressionList.add(表达式);
flag=true;
}否则{
System.out.println(“不是有效的表达式(必须以;或@结尾)”;
}
}
计算(表达列表);
}
公共静态无效计算(列表){
对于(inti=0;iAs,您正在计算字符串,然后if(expression.substring(expression.length()-1)=“;”){
应该是if(“;”).equals(expression.substring(expression.length()-1)){
我又发现了一个错误,您忘了为if
语句else if指定条件(某些条件){int num=Integer.parseInt(ch);}
calcStack.push(calcStack.pop()+calcStack.pop());
你不能这样做。calcStack.pop()
此语句无法获取任何内容,因为此时堆栈完全为空,抛出EmptyStackException
。这不是完整的代码,没有if语句条件的原因是因为我不确定如何将等式的每个数字都放到堆栈中。例如,输入可能是12 2+2-@应该计算到(12+2)-2=12,但我不知道怎么做。
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
import java.util.Stack;
public class PostFixEval {
static Scanner input = new Scanner(System.in);
static String expression;
static Stack<Integer> calcStack = new Stack<Integer>();
static List<String> expressionList = new ArrayList<String>();
static boolean flag = false;
public static void main(String[] args) {
System.out.print("Enter Your Expression: ");
while (flag == false){
expression = input.next();
System.out.println("");
expression = whiteSpaceRemover(expression);
if (expression.substring(expression.length() - 1) == ";"){
expressionList.add(expression);
} else if (expression.substring(expression.length() - 1) == "@"){
expressionList.add(expression);
flag = true;
} else {
System.out.println("Not a valid expression (must end in a ; or a @)");
}
}
calc(expressionList);
}
public static void calc(List<String> list){
for (int i=0;i<list.size();i++){
String currentExpression = list.get(i);
for (char ch : currentExpression.toCharArray()){
if (ch == '+'){
calcStack.push(calcStack.pop()+calcStack.pop());
System.out.println("Pop R1");
System.out.println("Pop R2");
System.out.println("ADD R1, R2");
System.out.println("PUSH R1");
}
else if (ch == '-')
{
int temp = calcStack.pop();
calcStack.push(calcStack.pop() - temp);
System.out.println("Pop R2");
System.out.println("Pop R1");
System.out.println("SUB R1, R2");
System.out.println("PUSH R1");
}
else if (ch == '*')
{
calcStack.push(calcStack.pop() * calcStack.pop());
System.out.println("Pop R1");
System.out.println("Pop R2");
System.out.println("MULT R1, R2");
System.out.println("PUSH R1");
}
else if (ch == '/')
{
int temp = calcStack.pop();
if(temp != 0){
calcStack.push(calcStack.pop() / temp);
System.out.println("Pop R1");
System.out.println("Pop R2");
System.out.println("DIV R1, R2");
System.out.println("PUSH R1");
}else{
System.out.println("CANNOT DIVIDE BY ZERO");
break;
}
}
else if
{
int num = Integer.parseInt(ch);
}
}
}
}
public static String whiteSpaceRemover(String express){
return express.replaceAll(" ","");
}
}