我正在評估一個表達式,並且我遇到輸入負數的麻煩。由於我的代碼的結構,以及減法運算符和負號是相同字符的事實,我的代碼不適用於負數。有沒有辦法解決這個問題?評估代碼,區分負數和負數?
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