即时计算,无需单击等于按钮并使用多个运算符

Instant calculation without clicking the equal button and using more than one oper

这是我的第一个问题 我正在编写一个 android 计算器应用程序,但我遇到的问题很少 我正在尝试制作一项功能,其中一旦单击任何操作按钮(+,-/,*),计算器应该立即显示结果而不是单击等于按钮,同时您可以执行多个操作,我成功使其仅适用于一个操作 (+) 但我无法让它与其他操作一起使用

我把它变成了数字按钮 这是 3 号按钮的代码,maddition 和 msubstract 是点击侦听器

的加号按钮
button3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                edt1.setText(edt1.getText() + "3");
                tv.setText(tv.getText() + "3");
                float z = Float.parseFloat(edt1.getText().toString());
                int i = 0;
                if (mAddition) {
                    String s = tv.getText().toString();
                    String x = "";
                    while (i < s.length()) {
                        if (s.charAt(i) != '+') {
                            x = x + s.charAt(i) + "";
                        } else {
                            float m = Float.parseFloat(x);
                            z = z + m;
                            x = "";


                        }
                        i++;


                    }
                    tvz.setText(z + "");
                    xAdd = false;

                }
                if (mSubtract) {
                    String s = tv.getText().toString();
                    String x = "";
                    while (i < s.length()) {
                        if (s.charAt(i) != '-') {
                            x = x + s.charAt(i) + "";
                        } else {
                            if (isDouble(x)){
                                float m = Float.parseFloat(x);
                                z = z - m;
                                x = "";
                            }


                        }
                        i++;


                    }
                    tvz.setText(z + "");
                    xSub = false;

                }
                }


        });

添加点击监听器

  buttonAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if (TextUtils.isEmpty(edt1.getText().toString())) {
                    return;
                }


                String str = edt1.getText().toString();


                if (isDouble(str)) {

                    if (edt1 == null) {
                        edt1.setText("");
                    } else {
                        mValueOne = Float.parseFloat(edt1.getText() + "");
                        tv.setText(tv.getText() + "+");
                        mAddition = true;
                        edt1.setText(null);

                    }

                } else return;
            }
        });

这是我的源代码 https://pastebin.com/7QaDvx9D

错误日志猫 05-27 12:33:55.565 24916-24921/ispam.mark_06 I/art: 做部分代码缓存收集,代码=17KB,数据=24KB 05-27 12:33:55.565 24916-24921/ispam.mark_06 I/art: 代码缓存收集后,代码=17KB,数据=24KB 05-27 12:33:55.565 24916-24921/ispam.mark_06 I/art:增加代码缓存容量至128KB 05-27 12:33:56.931 24916-24916/ispam.mark_06 E/SpannableStringBuilder: SPAN_EXCLUSIVE_EXCLUSIVE 跨度不能有零长度 05-27 12:33:56.931 24916-24916/ispam.mark_06 E/SpannableStringBuilder: SPAN_EXCLUSIVE_EXCLUSIVE 跨度不能有零长度 05-27 12:33:57.375 24916-24916/ispam.mark_06 E/SpannableStringBuilder: SPAN_EXCLUSIVE_EXCLUSIVE 跨度不能有零长度 05-27 12:33:57.375 24916-24916/ispam.mark_06 E/SpannableStringBuilder: SPAN_EXCLUSIVE_EXCLUSIVE 跨度不能有零长度 05-27 12:33:58.948 24916-24916/ispam.mark_06 E/SpannableStringBuilder: SPAN_EXCLUSIVE_EXCLUSIVE 跨度不能为零长度 05-27 12:33:58.949 24916-24916/ispam.mark_06 E/SpannableStringBuilder: SPAN_EXCLUSIVE_EXCLUSIVE 跨度不能为零长度 05-27 12:33:59.931 24916-24916/ispam.mark_06 D/AndroidRuntime: 关闭虚拟机 05-27 12:33:59.933 24916-24916/ispam.mark_06 E/AndroidRuntime:致命异常:main 进程:ispam.mark_06,PID:24916 java.lang.NumberFormatException:对于输入字符串:“3-3-3” 在 java.lang.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1306) 在 java.lang.Float.parseFloat(Float.java:459) 在 ispam.mark_06.Calculator$4.onClick(Calculator.java:182) 在 android.view.View.performClick(View.java:5685) 在 android.view.View$PerformClick.run(View.java:22481) 在 android.os.Handler.handleCallback(Handler.java:751) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:241) 在 android.app.ActivityThread.main(ActivityThread.java:6274) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

提前感谢任何帮助?

根据错误,我了解到原因是您的代码试图将字符串“3-3-3”解析为浮点值,因此出现错误。 为避免此错误,您可以在计算并显示答案后清除编辑文本,即执行 tv.setText("");在显示结果后,旧运算符仍然不会附加到编辑文本文本中。