我試圖讓使用子程序以下說明一些道理:評估Postfix(RPN)Java中的數學表達式。沒有堆棧,只串
I = 1
而我< = N
如果V-I是一個操作數:推v_i到tmp2。
如果v_i是運算符:將v_i應用於 tmp2的前兩個元素。用tmp2中的結果替換它們。
i = i + 1 從tmp2輸出結果。
所以基本上我想在後綴(RPN)窗體中計算一些表達式。在這裏,我希望每當數字是一個操作數(數字)被傳送到tmp2,並且有一個操作員通過tmp2中的valuse重新設定它時。例如3 5 1 +8/14 * = 14
其他問題:無論我寫什麼,我得到「線程中的異常」主「java.lang.StringIndexOutO ....」錯誤。 v_i是數字或運算符或括號。
感謝提前!
我的代碼:
static int eval(String postfix){
int result = 0;
String temp2 ="";
for (int i=0 ; i<postfix.length(); i++) {
if (postfix.charAt(i) !=')' && postfix.charAt(i)!= '(' && postfix.charAt(i)!= p(infix.charAt(i)))
temp2 += postfix.charAt(i);
int num1,num2;
char operator;
do {
i++;
} while (Character.isDigit(postfix.charAt(i)));
num1 = Integer.parseInt(postfix.substring(0,i));
operator = postfix.charAt(i++);
num2 = //Double.parseDouble(expression.substring(i));
Integer.parseInt(postfix.substring(i+1));
result = num1 + num2;
result = num1 - num2;
result = num1 * num2;
result = num1/num2;
switch (operator) {
case '+' : result = num1 + num2; break;
case '-' : result = num1 - num2; break;
case '*' : result = num1 * num2; break;
case '/' : result = num1/num2; break;
}
}
return result;
}
您無法評估postfix或任何其他種類的-fix而無需堆棧。不清楚你在問什麼。你希望以某種方式使用一個字符串作爲一個堆棧?如果是這樣,爲什麼? – EJP