我试图使用子程序了解以下说明:
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
其他问题:无论我写什么,我得到"线程中的异常" 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;
}
答案 0 :(得分:0)
这意味着您正在尝试访问char数组之外的字符,即char数组的长度为10,并且您正在尝试获取第11个字符。
解决问题的更好方法是首先使用String.split或StringTokenizer StringTokenizer对表达式进行标记,然后循环遍历每个标记: