Java Can';t从RPN转换为中缀时检测2位数字
我试图实现一个java方法,该方法接受RPN(反向波兰符号)中的输入,并通过使用堆栈将其转换为中缀符号并进行计算。我已经建立了堆栈和一个工作转换器,但我发现在接受多个数字(如10)时存在问题,我解决这个问题的想法是输入每个由空格分隔的单独实体,10+20将被输入为“10 20+”,但这会导致越界错误。在没有下面标记的部分的情况下,该程序可以很好地处理诸如“12+”(1+2)和更复杂的方程,只要它们涉及一位数的值。堆栈也可以通过push和pop方法完全发挥作用Java Can';t从RPN转换为中缀时检测2位数字,java,arrays,string,stack,rpn,Java,Arrays,String,Stack,Rpn,我试图实现一个java方法,该方法接受RPN(反向波兰符号)中的输入,并通过使用堆栈将其转换为中缀符号并进行计算。我已经建立了堆栈和一个工作转换器,但我发现在接受多个数字(如10)时存在问题,我解决这个问题的想法是输入每个由空格分隔的单独实体,10+20将被输入为“10 20+”,但这会导致越界错误。在没有下面标记的部分的情况下,该程序可以很好地处理诸如“12+”(1+2)和更复杂的方程,只要它们涉及一位数的值。堆栈也可以通过push和pop方法完全发挥作用 public static v
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 {
这是使用string类中的split方法修复的
public static void stackRPN(){
Stack myStack = new Stack();
Scanner sc = new Scanner(System.in);
System.out.print("Enter an equation: ");
System.out.println();
String eq = sc.nextLine();
//This Bit splits up the string where it meets a space
String[] eqS = eq.split(" ");
int len = eqS.length;
for (int i = 0; i < len; i++){
String car1 = eqS[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 {
myStack.push(car1);
}
}
mainMenu();
}
publicstaticvoidstackrpn(){
Stack myStack=新堆栈();
扫描仪sc=新的扫描仪(System.in);
System.out.print(“输入公式:”);
System.out.println();
字符串eq=sc.nextLine();
//该位在字符串与空格相交处将其拆分
字符串[]eqS=eq.split(“”);
int len=公式长度;
对于(int i=0;i
多位数的分隔符是什么?我建议您先按空格分割,然后从空格开始。每个字符之间的分隔符是一个空格
myStack.push(car1);
}
}
mainMenu();
}
public static void stackRPN(){
Stack myStack = new Stack();
Scanner sc = new Scanner(System.in);
System.out.print("Enter an equation: ");
System.out.println();
String eq = sc.nextLine();
//This Bit splits up the string where it meets a space
String[] eqS = eq.split(" ");
int len = eqS.length;
for (int i = 0; i < len; i++){
String car1 = eqS[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 {
myStack.push(car1);
}
}
mainMenu();
}