java - 我的简单计算器不能很好地处理双数

标签 java android

我正在做一个基本的计算器,看起来效果很好,除非当我尝试求和/除法时......一个双数,例如 5.5

然后,如果我尝试这样做:5.5 + 1,我得到的结果是 56 而不是 6.5。看来我的逻辑在进行操作时没有捕获要点。

我们将不胜感激!

这是我的代码:

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));
                            }

最佳答案

您的错误是在这种情况下:

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));
    }

您从 val 中的 String 中收集所有数字,停止于 +- */您忽略所有其他字符,它们不会落入任何 else 中,因此只会导致不执行任何操作并且循环前进。输入 5.5+1 会发生什么?

  • 5 添加到 val
  • . 被忽略
  • 5 添加到 val:现在是 55
  • +:"55" 被解析为 vals[0] = 55"+" 为放入signs[0]
  • 1 被添加到 val 中,代码检测到它是字符串的结尾,因此它将 "1" 解析为 vals[1] = 1

代码的其余部分愉快地计算55 + 1,但你永远不会发现。

除了代码的有效性之外,您应该

  1. 将条件更改为

    if (Character.isDigit(inputText.getText().toString().charAt(i))
        || inputText.getText().toString().charAt(i) == '.') {
    
  2. 添加最后一个else,将任何失败字符报告为警告或错误。

关于java - 我的简单计算器不能很好地处理双数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40224736/

相关文章:

java - Android 应用程序在登录和注册时崩溃

android - 我想将 chrome 自定义选项卡添加到我的应用程序中,如果用户没有安装 chrome 该怎么办

android - 我需要帮助在 android 上制作长按上下文菜单

java - JPA 中的三角函数

macos - Java Web Start in 10.8.2 with native (Apple) Java 1.6 找不到 JRE

java - Libgdx:创建其他对象的对象

java - 如何在 JTextPane 上添加不同颜色的文本

android - 为什么 MQTT 服务会阻止 Activity ?

Android ProgressDialog 样式

android - 添加一个看起来像 native 应用程序的设置页面