在Postfix(RPN)Java中计算数学表达式。没有堆栈,只有字符串
我试图通过一个子程序来理解以下指令: i=1在Postfix(RPN)Java中计算数学表达式。没有堆栈,只有字符串,java,regex,infix-notation,calc,rpn,Java,Regex,Infix Notation,Calc,Rpn,我试图通过一个子程序来理解以下指令: i=1 而i则表示您试图访问字符数组之外的字符,即字符数组的长度为10,您试图获取第11个字符 解决问题的更好方法是首先使用String.split或StringTokenizer标记表达式,然后循环遍历每个标记: 如果token是一个操作数,那么push-Java有一个堆栈类,所以使用它。 如果令牌是运算符,则从堆栈中弹出操作数并执行该操作,然后将答案推回堆栈。 谢谢但赋值的重点是使用字符串操作。我认为String.split或StringTokenize
而i则表示您试图访问字符数组之外的字符,即字符数组的长度为10,您试图获取第11个字符 解决问题的更好方法是首先使用String.split或StringTokenizer标记表达式,然后循环遍历每个标记: 如果token是一个操作数,那么push-Java有一个堆栈类,所以使用它。 如果令牌是运算符,则从堆栈中弹出操作数并执行该操作,然后将答案推回堆栈。
谢谢但赋值的重点是使用字符串操作。我认为String.split或StringTokenize是操作字符串的方法。如果您必须循环遍历每个字符,而不使用堆栈计算表达式,那么我认为您是在浪费时间。头脑正常的人不应该指望你这么做。没有堆栈,你不能计算后缀或任何其他类型的-修复。不清楚你在问什么。您是否希望以某种方式使用字符串作为堆栈?若然,原因为何?
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;
}