我正在评估一个表达式,并且我遇到输入负数的麻烦。由于我的代码的结构,以及减法运算符和负号是相同字符的事实,我的代码不适用于负数。有没有办法解决这个问题?评估代码,区分负数和负数?
private float evalNoPB(String s) {
float tempAns = 0;
if (s.contains("*") == false && s.contains("/") == false && s.contains("+") == false && s.contains("-") == false) {
return Float.parseFloat(s);
}
if (s.length() - 1 > 0) {
int i;
boolean foundPlusMinus = false;
for (i = s.length() - 1; i > 0; i--) {
if (s.charAt(i) == '+' || s.charAt(i) == '-') {
System.out.println(i);
foundPlusMinus = true;
break; // keep value of i for substrings
}
foundPlusMinus = false;
}
if (foundPlusMinus == false) { // for loop went through and did not find + or -
for (i = s.length() - 1; i > 0; i--) {
if (s.charAt(i) == '*' || s.charAt(i) == '/') {
System.out.println(i);
break; // keep value of i for substrings
}
}
}
String sub1 = s.substring(0, i);
System.out.println(sub1);
String sub2 = s.substring(i + 1, s.length());
System.out.println(sub2);
if (s.charAt(i) == '+') {
tempAns = evalNoPB(sub1) + evalNoPB(sub2);
} else if (s.charAt(i) == '-') {
tempAns = evalNoPB(sub1) - evalNoPB(sub2);
} else if (s.charAt(i) == '*') {
tempAns = evalNoPB(sub1) * evalNoPB(sub2);
} else if (s.charAt(i) == '/') {
float divisorCheck = evalNoPB(sub2);
if (divisorCheck != 0) {
tempAns = evalNoPB(sub1)/evalNoPB(sub2);
} else { // cannot divide by 0
throw new IllegalArgumentException("cannot divide by 0");
}
}
}
return tempAns;
}
您能更清楚地了解您的问题吗? –
此代码评估一个String表达式。它适用于诸如“3 * 4 + 5”之类的字符串,但不适用于诸如“-3 * 4 + 5”之类的字符串,因为负号被视为减法运算符。这就是我需要修复的问题 –
把它全部扔掉,查找'递归下降表达式解析器'或者Dijkstra调车码算法。你永远不会从这里到达那里。 – EJP