我发现的一个问题是我无法比较+, - ,*,/还有其他方法吗?谢谢你的帮助
CODE:
import java.util.Scanner;
public class Question2 {
public static void main(String args[]){
Scanner scan = new Scanner(System.in);
double array[] = new double[20];
System.out.print("Enter sum: ");
String sum = scan.nextLine();
getValue(sum, array, 0);
System.out.print(array[0]);
}
public static void getValue(String input, double array[], int poi){
int counter = 0;
char nextValue = ' ';
String value = "";
double num = 0;
boolean checkDub = true;
do{
value = value + input.charAt(counter);
counter ++;
nextValue = input.charAt(counter);
}while(nextValue != ' ');
try {num = Integer.parseInt(value);}
catch (Exception e) {
checkDub = false;
double l2 = array[poi];
poi--;
double l1 = array[poi];
if(value.equals("+")){ array[poi] = l1 + l2;} // <--- comparing problem?
else if(value.equals("-")){ array[poi] = l1 - l2;}
else if(value.equals("*")){ array[poi] = l1 * l2;}
else if(value.equals("/")){ array[poi] = l1 / l2;}
else{System.out.println("Error");}
}
if(checkDub = true){
array[poi] = num;}
String nextInput = input.substring(counter);
getValue(nextInput, array, poi + 1);
}
}
答案 0 :(得分:1)
提示:
value
包含的内容。getValue
方法更改为非静态方法,并使用实例变量作为状态。=
来比较值。请改用==
。 a == true
也相当于a
。答案 1 :(得分:0)
非常确定你的问题是你没有剥离领先的太空人物。例如,如果输入为"2 2 + "
,则在第三次调用的输入为" + "
,并且值{得到{1}}。这与" +"
的同等性检查失败了。与此同时,"+"
高兴地剥离了前导空格。
您的代码也将抛出IndexOutOfBoundsException异常,如果您的输入不是一个空格终止。此外,你也不会像处理更复杂的表达式parseInt
,因为你的不的做评估后的第一个递归调用。 (提示:当您从输入中消耗掉所有令牌时,您应该返回。)
样式点(不是错误):你应该使用的indexOf找到空间(或者,甚至更好,分割)。递归尾调用应该是一个循环(对于很长的输入,可能会导致StackOverflowError)。您不需要布尔值checkDub - 而是可以将"1 2 + 3 +"
的正文放在if (checkDub == true)
内(try
之后)。但是,如果你正在使用循环,你可能想要重构。