我必须构建一个计算器并且我正在进行一些验证,代码有点长,所以我只会把它打破它。
这是一个进行乘法运算的验证,它在尝试乘以负数时会中断,其他每个操作都正确完成但是乘法:
else if(resulttxt.getText().toString().contains("*")){
String resultarray=resulttxt.getText().toString();
String[] split=resultarray.split("\\*");
finalresult = Double.valueOf(split[0]) * Double.valueOf(split[1]);
if (finalresult<0){
negative=true;
}else{
negative=false;
}
resulttxt.setText(String.valueOf(finalresult));
结果文本是从TextView接收到的,它从数字或符号上获取它的数据,这些数字或符号也是TextViews(不是按钮,但是它们确实有点击监听器)当c = on时,操作完成登录。
如果我尝试做-6 * 45:
,则会抛出错误java.lang.NumberFormatException: Invalid double: "6*45"
就像我所说的那样,所有事情都与加法,减法和除法有关,它只是间断的乘法。
答案 0 :(得分:2)
我尝试在编译器中执行代码:
String resulttxt = "-6*45";
boolean negative = false;
if(resulttxt.contains("*")){
String resultarray=resulttxt;
String[] split=resultarray.split("\\*");
double finalresult = Double.valueOf(split[0]) * Double.valueOf(split[1]);
if (finalresult<0){
negative=true;
}else{
negative=false;
}
System.out.println(finalresult);
}
一切正常,请验证程序中使用的数据类型。
另外,乘法和除法工作正常。 “-6 + 45,-6 * 45和-6/45”(任何其他组合。我只是使用相同的)
但是对于减法,因为模式为“-6-45”,上述逻辑将失败并引发数字格式异常。这是因为如果你拆分“\ - ”,则“ - ”是字符串中的第一个字符,之前没有任何内容。
因此你的分裂会失败。因此,为了避免这种情况,您始终可以使用子字符串函数将最后一个字符索引分割。
答案 1 :(得分:1)
我在其他操作结束时进行了验证,因此,即使进入乘法部分,它也会进入&#34; - &#34;检查时验证
thank you page
因为它是一个负值,所以它确实有一个&#34; - &#34; ...所以它作为减法输入而不是因为这个... ...
要解决这个问题,我必须将减法验证放在所有这些的底部。
非常感谢那些建议我检查错误被抛出的行的人我不会知道logcat实际上告诉你错误是什么而且我很惊讶这是对我的减法验证是一个&#34; WTF&#34;那一刻,然后我意识到我刚才告诉你的事情。
答案 2 :(得分:0)
请改为尝试:
String s1 = resultarray.substring(0,resultarray.indexOf("*"));
String s2 = resultarray.substring(resultarray.indexOf("*")+1,resultarray.length());
double d1= Double.valueOf(s1);
double d2= Double.valueOf(s2);
希望这有帮助