我已经写了一个Infix to Postfix方法,但是我正在努力弄清楚如何在运算符之间保持整数在一起。当前,放入方法的所有整数都在方法末尾分开。所以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
。
获得后续数字时,将sum
乘以10
并加上数字。
继续这样做,直到处理完所有数字。然后存放推堆栈上的值。
如果使用字符串
然后读入第一位数字并分配给一个字符串。
继续读取其他数字并将其连接到字符串。
完成后,将字符串压入堆栈。
这里是第一种方法的示例。
String v = "4982 + 2345";
int value = 0;
int n = 0;
while (Character.isDigit(v.charAt(n))) {
char c = v.charAt(n);
value = value * 10 + (c - '0'); // Convert digit from ASCII
n++;
}
System.out.println("value = " + value);
打印
值= 4982
请注意,n
一旦到达字符串末尾,就会超出范围。但是您的主要代码应该注意这一点。