Java 如何在中缀到后缀后将整数分组在一起

Java 如何在中缀到后缀后将整数分组在一起,java,postfix-notation,infix-notation,shunting-yard,Java,Postfix Notation,Infix Notation,Shunting Yard,我已经写了一个中缀到后缀的方法,但我正在努力找出如何在运算符之间保持整数在一起。目前,放入该方法的所有整数都在该方法的末尾分开。所以3*15*(45-23)变成了(3,1,5,*,4,5,2,3,-,*),当它应该是(3,15,*,45,23,-,*)。我只是需要一些正确方向的提示或指点来解决这个问题。我读了一些关于抽象层的东西,但对它的理解还不够,无法实现它 更新 我让我的程序保持整数分组在一起,但我的修正留下了我的数字被钉在最后。我的修正包括扫描下一个数字,而它不是空的,如果它是一个数字,但

我已经写了一个中缀到后缀的方法,但我正在努力找出如何在运算符之间保持整数在一起。目前,放入该方法的所有整数都在该方法的末尾分开。所以3*15*(45-23)变成了(3,1,5,*,4,5,2,3,-,*),当它应该是(3,15,*,45,23,-,*)。我只是需要一些正确方向的提示或指点来解决这个问题。我读了一些关于抽象层的东西,但对它的理解还不够,无法实现它

更新 我让我的程序保持整数分组在一起,但我的修正留下了我的数字被钉在最后。我的修正包括扫描下一个数字,而它不是空的,如果它是一个数字,但当前数字将被设置为下一个循环中的下一个数字。我应该尝试新的解决方案,还是让这个解决方案发挥作用

  StringBuilder temp = new StringBuilder();
                    int j = i;
                    temp.append(numAsString);
                    if (!expression.substring(j+1, j+2).isEmpty())
                    {
                        nextNum = expression.substring(j+1, j+2);
                        while (nextNum.equals("0") || nextNum.equals("1") || nextNum.equals("2")
                            || nextNum.equals("3") || nextNum.equals("4") || nextNum.equals("5") || nextNum.equals("6") || nextNum.equals("7")
                            || nextNum.equals("8") || nextNum.equals("9"))
                        {
                            if (numAsString.equals("π") || nextNum.equals("π")) {
                                temp.append("3.14");
                            }
                            temp.append(nextNum);
                            System.out.println(nextNum);
                            j++;
                            nextNum = expression.substring(j+1, j+2);
                        }
                    }
                    numStack.push(temp.toString());```

有几种方法可以做到这一点

  • 当您检测到第一个数字时,解析它并将其分配给 值

  • 当您得到后面的数字时,用
    sum
    乘以
    10
    并将数字相加

  • 继续这样做,直到处理完所有数字。然后商店推 堆栈上的值

  • 如果您正在使用字符串

  • 然后读入第一个数字并分配给字符串

  • 继续读取其他数字并将其连接到字符串

  • 完成后,将字符串推到堆栈上

  • 下面是第一种方法的示例

    String v=“4982+2345”;
    int值=0;
    int n=0;
    while(Character.isDigit(v.charAt(n))){
    字符c=v.charAt(n);
    value=value*10+(c-“0”);//从ASCII转换数字
    n++;
    }
    System.out.println(“value=“+value”);
    
    印刷品

    值=4982


    请注意,
    n
    一旦到达字符串末尾,就会超出范围。但是主代码应该注意这一点。

    您没有正确扫描操作数。当有以下数字时,您需要继续扫描。
    expression.substring(j+1,j+2).isEmpty()
    将永远不会为真,因此您可以删除该条件