gpt4 book ai didi

java - RPN 表达式 java 中元素之间的空格

转载 作者:太空宇宙 更新时间:2023-11-04 14:07:28 25 4
gpt4 key购买 nike

我有一个方法getRPNString(),它返回逆波兰表示法字符串。我想用空格键分割这个字符串来计算它。现在我不明白如何在 RNP 字符串中添加空格键,因为它不适用于两位数字。

public class Calc1 {

public static void main(String[] args) {

String in = "((5+3*(4+2)*12)+3)/(1+3)+5";
String out = getRPNString(in);
System.out.println(out);

}

private static String getRPNString(String in) {
LinkedList<Character> oplist = new LinkedList<>();
StringBuilder out = new StringBuilder();

for (int i = 0; i < in.length(); i++) {
char op = in.charAt(i);
if (op == ')') {
while (oplist.getLast() != '(') {
out.append(oplist.removeLast());
}
oplist.removeLast();
}

if (Character.isDigit(op)) {

out.append(op);

/*int j = i + 1;
for (; j < in.length(); j++) {
if (!Character.isDigit(j)) {
break;
}
i++;
}
out.append(in.substring(i, j));*/

}

if (op == '(') {
oplist.add(op);
}

if (isOperator(op)) {
if (oplist.isEmpty()) {
oplist.add(op);
} else {
int priority = getPriority(op);
if (priority > getPriority(oplist.getLast())) {
oplist.add(op);
} else {
while (!oplist.isEmpty()
&& priority <= getPriority(oplist.getLast())) {
out.append(oplist.removeLast());
}
oplist.add(op);
}
}
}

}

while (!oplist.isEmpty()) {
out.append(oplist.removeLast());
}

return out.toString();
}

private static boolean isOperator(char c) {
return c == '+' || c == '-' || c == '*' || c == '/' || c == '%';
}

private static int getPriority(char op) {
switch (op) {

case '*':
case '/':
return 3;

case '+':
case '-':
return 2;

case '(':
return 1;

default:
return -1;
}
}

}

我尝试在我的 StringBuilder 变量中通过append(' ') 添加空格键。但两位数就不对了。我想我完全不明白如何制作它。

例如,如果输入是 String in = "((5+3*(4+2)*12)+3)/(1+3)+5";输出将是 5342+12+3+13+/5+,当我向所有调用添加空格键时 out.append(' ')**out 是 **5 3 4 2 + * 1 2 * + 3 + 1 3 +/5 +,因此像“12”这样的数字变成了“1 2”。你能帮忙吗?

最佳答案

只需将 Character.isDigit(op) 之后注释掉的代码更改为:

int j = i + 1;
int oldI = i;//this is so you save the old value
for (; j < in.length(); j++) {
if (!Character.isDigit(in.charAt(j))) {
break;
}
i++;
}
out.append(in.substring(oldI, j));
out.append(' ');

关于java - RPN 表达式 java 中元素之间的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28704483/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com