我对自己提出了一个挑战,在Java上创建函数'eval()‘(来自python),而不需要导入任何额外的库。但当我面对"-20-10“时我被困住了。
当找到运算符时,我的代码基本上将字符串分成两部分(a和b)。
String equ = "-20-10" // The first "-" is found
String a = "";
String b = "20-10";然后,字符串a和b进入递归循环。但在这种情况下,a将为“(空)”并输出错误。
String equ = "20-10";
String a = "20";
String b = "10";这个错误与程序的逻辑有关,我似乎无法理解,需要指导。
private String calc(String equ) {
String result = equ;
if(equ.contains("+")) {
System.out.println("+ found");
String a = equ.substring(0, equ.indexOf('+'));
System.out.println("+ a:"+a);
String b = equ.substring(equ.indexOf('+')+1);
System.out.println("+ b:"+b);
a = calc(a);
System.out.println(a+" + "+b);
b = calc(b);
result = String.valueOf(Double.valueOf(a)+Double.valueOf(b));
System.out.println("+ result:"+result);
}
else if (equ.contains("-")) {
System.out.println("- found:");
String a = equ.substring(0, equ.indexOf('-'));
System.out.println("- a:"+a);
String b = equ.substring(equ.indexOf('-')+1);
System.out.println("- b:"+b);
a = calc(a);
System.out.println(a+" - "+b);
b = calc(b);
result = String.valueOf(Double.valueOf(a)-Double.valueOf(b));
System.out.println("- result:"+result);
}
else if (equ.contains("/")) {
System.out.println("/ found:");
String a = equ.substring(0, equ.indexOf('/'));
System.out.println("/ a:"+a);
String b = equ.substring(equ.indexOf('/')+1);
System.out.println("/ b:"+b);
a = calc(a);
System.out.println(a+" / "+b);
b = calc(b);
result = String.valueOf(Double.valueOf(a)/Double.valueOf(b));
System.out.println("/ result:"+result);
}
else if(equ.contains("*")) {
System.out.println("* found:");
String a = equ.substring(0, equ.indexOf('*'));
System.out.println("* a:"+a);
String b = equ.substring(equ.indexOf('*')+1);
System.out.println("* b:"+b);
a = calc(a);
System.out.println(a+" * "+b);
b = calc(b);
result = String.valueOf(Double.valueOf(a)*Double.valueOf(b));
System.out.println("* result:"+result);
}
return result;
}发布于 2021-01-20 08:24:47
浏览问题是,当您用calc()调用"-20"时,它将字符串分离到""和"20",所以当tou调用Double.valueOf("")时,他抛出了一个NumberFormatException。要解决此问题,只需将正负if状态更改为:
if(equ.substring(1).contains("+")) {
System.out.println("+ found");
String a = equ.substring(0, equ.lastIndexOf('+'));
System.out.println("+ a:"+a);
String b = equ.substring(equ.lastIndexOf('+')+1);
System.out.println("+ b:"+b);
a = calc(a);
System.out.println(a+" + "+b);
b = calc(b);
result = String.valueOf(Double.valueOf(a)+Double.valueOf(b));
System.out.println("+ result:"+result);
}
else if (equ.substring(1).contains("-")) {
System.out.println("- found:");
String a = equ.substring(0, equ.lastIndexOf('-'));
System.out.println("- a:"+a);
String b = equ.substring(equ.lastIndexOf('-')+1);
System.out.println("- b:"+b);
a = calc(a);
System.out.println(a+" - "+b);
b = calc(b);
result = String.valueOf(Double.valueOf(a)-Double.valueOf(b));
System.out.println("- result:"+result);
}这使得函数将"-20"看作是"-20",而不是""减去"20"。
https://stackoverflow.com/questions/65804959
复制相似问题