Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';t从RPN转换为中缀时检测2位数字_Java_Arrays_String_Stack_Rpn - Fatal编程技术网

Java Can';t从RPN转换为中缀时检测2位数字

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

我试图实现一个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 {

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