我正在做一个基本的计算器,似乎工作正常,除非我试图求和/除...一个双数,例如5.5
然后,如果我尝试这样做:5.5 + 1我得到的结果是56而不是6.5。似乎我的逻辑在执行操作时并不重视。
一些帮助将是apreciate!
这是我的代码:
for (int i = 0; i < inputText.getText().toString().length(); i++) {
if (Character.isDigit(inputText.getText().toString().charAt(i))) {
val += inputText.getText().toString().substring(i, i + 1);
if (i == inputText.getText().toString().length() - 1) {
vals.add(Double.parseDouble(val));
}
} else if (inputText.getText().toString().substring(i, i + 1).equals("+")) {
vals.add(Double.parseDouble(val));
signs.add("+");
val = "";
} else if (inputText.getText().toString().substring(i, i + 1).equals("-")) {
vals.add(Double.parseDouble(val));
signs.add("-");
val = "";
} else if (inputText.getText().toString().substring(i, i + 1).equals("*")) {
vals.add(Double.parseDouble(val));
signs.add("*");
val = "";
} else if (inputText.getText().toString().substring(i, i + 1).equals("/")) {
vals.add(Double.parseDouble(val));
signs.add("/");
val = "";
}
}
double result = 0;
for(int i=0; i < vals.size(); i++){
if (i == 0){
result = vals.get(i);
}
else {
String sign = signs.get(i-1);
switch (sign){
case "+":
result = vals.get(i) + result;
break;
case "-":
result = result - vals.get(i);
break;
case "/":
result = result / vals.get(i);
break;
case "*":
result = result * vals.get(i);
break;
}
}
}
1. I think that the problem is in this part of the code:
//I can check the value of vals is 5.5 here when do the first loop in for loop
ArrayList<Double> vals = new ArrayList<>();
//but here the value of val is 55 and not 5.5
val += inputText.getText().toString().substring(i, i + 1); //Then, I'm
adding in the array the 55 instead the 5.5 if (i ==
inputText.getText().toString().length() - 1) {
vals.add(Double.parseDouble(val));
}
答案 0 :(得分:1)
您的错误是在这种情况下:
if (Character.isDigit(inputText.getText().toString().charAt(i))) {
val += inputText.getText().toString().substring(i, i + 1);
if (i == inputText.getText().toString().length() - 1) {
vals.add(Double.parseDouble(val));
}
您收集String
val
中的所有数字,停在+
,-
,*
,/
。 您忽略所有其他字符,它们不会落入任何else
中,因此只会导致无操作并且循环前进。输入5.5+1
会发生什么?
5
已添加到val
.
被忽略5
已添加到val
:现在它55
+
:"55"
已解析为vals[0] = 55
,"+"
已归入signs[0]
1
被添加到val
,代码检测到它是字符串的结尾,因此它将"1"
解析为vals[1] = 1
。其余的代码很高兴地计算55 + 1
,你永远不会知道。
除了代码的有效性,你应该
将条件更改为
if (Character.isDigit(inputText.getText().toString().charAt(i))
|| inputText.getText().toString().charAt(i) == '.') {
添加最终else
,将任何后果字符报告为警告或错误。
答案 1 :(得分:0)
您可以使用ScriptEngine
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
Object result = engine.eval(editText1.getText().toString());
editText1.setText(result.toString());