【问题标题】:Can't detect 2 digit numbers when converting from RPN to Infix从 RPN 转换为 Infix 时无法检测到 2 位数字
【发布时间】:2014-04-14 02:40:00
【问题描述】:

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

【问题讨论】:

标签: java arrays string stack rpn


【解决方案1】:

使用 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(); 
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-26
    • 2021-07-23
    • 1970-01-01
    • 2019-11-30
    • 2016-04-24
    • 1970-01-01
    相关资源
    最近更新 更多