1

我正在尝试实现一个 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(); 
    }
4

1 回答 1

1

这是使用字符串类中的拆分方法修复的

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(); 
    }
于 2014-03-10T19:46:55.263 回答