サブルーチンを使用して、次の命令を理解しようとしています。
私は= 1
i <= nの間
v_i がオペランドの場合: v_i を tmp2 にプッシュします。
v_i が演算子の場合: tmp2 の上位 2 つの要素に v_i を適用します。これらを tmp2 の結果に置き換えます。
i = i + 1 tmp2 からの出力結果。
したがって、基本的には、postfix(RPN) 形式で式を計算しようとしています。ここで、数字がオペランド(数値)である場合はいつでもtmp2に転送し、演算子がある場合はtmp2の値で置き換えます。例: 3 5 1 +8 / 14* = 14
その他の問題: 何を書いても、"Exception in thread "main" 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;
}