我正在尝试实现一个 java 方法,该方法接受 RPN(反向波兰表示法)中的输入,并通过使用堆栈将其转换为中缀表示法并计算它。我已经构建了堆栈和一个工作转换器,但是在接受多个数字(例如 10)时我发现了问题,我解决这个问题的想法是输入由空格分隔的每个单独的实体,将输入 10+20作为“10 20 +”,但这会导致越界错误。如果没有下面标记的部分,程序可以很好地处理诸如“12+”(1+2)和更复杂的等式,只要它们涉及单个数字值。堆栈也具有完整的功能,具有 push 和 pop 方法
public static void stackRPN(){
Stack myStack = new Stack();
Scanner sc = new Scanner(System.in);
System.out.println("Enter an equation: ");
String eq = sc.nextLine();
int len = eq.length();
for (int i = 0; i < len; i++){
String car1 = String.valueOf(eq.charAt(i));
if ("+".equals(car1) || "-".equals(car1) || "/".equals(car1) || /*"car1"*/"x".equals(car1)){
String a = myStack.pop();
String b = myStack.pop();
//This handlws all the digits
double bI = Double.parseDouble(b);
double aI = Double.parseDouble(a);
double finalNo = 0;
switch (car1) {
case "+": finalNo = bI + aI;
break;
case "-": finalNo = bI - aI;
break;
case "/": finalNo = bI / aI;
break;
case "x": finalNo = bI * aI;
break;
}
myStack.push(finalNo+"");
String finEq = b+car1+a;
System.out.println(finEq + " = " +finalNo);
} else {
这个位不起作用
while (len < i+1 && eq.charAt(i+1) != ' '){
car1 = car1+eq.charAt(i+1);
i++;
}
到这里
myStack.push(car1);
}
}
mainMenu();
}