为了账号安全,请及时绑定邮箱和手机立即绑定

制作计算器时值未更新

制作计算器时值未更新

繁星coding 2021-11-03 10:51:08
我在 android studio 中制作了一个简单的应用程序。我使用了一个单一的文本视图来接收这两个数字。我还制作了按钮,用于 10 位数字、4 位运算和小数点以及等号。我的应用程序没有读取第二个数字。当我按下“=”按钮时,它只显示第一个数字。例如,当我输入一个数字 25 并按下“+”按钮时,该数字将存储在浮点变量 res 中,并且文本视图被清除。现在,如果我输入第二个数字 11 并按“=”,则输出为 25.0下面是我按下 + 按钮时的代码。    sum.setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View v) {            if(result.getText()==null)            {                result.setText("");            }            else            {                num1 = Float.parseFloat(result.getText().toString());                res=res+num1;                result.setText(null);                num1=0;            }        }    });下面是我按下 = 时的代码    equal.setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View v) {                result.setText(Float.toString(res));                res=0;        }    });num1和res,都是浮点数,都初始化为 0。
查看完整描述

3 回答

?
慕运维8079593

TA贡献1876条经验 获得超5个赞

对运算符使用 switch case,假设以下是字段;


public static final int plus = 1

 public static final int minus= 2

 public static final int divide= 3

 public static final int multiply= 4


和一个保存当前操作的变量,


int currentOperation;

当单击某个操作员按钮时,将“currentOperation”分配给侦听器中的该操作


sum.setOnClickListener(new View.OnClickListener() {

    @Override

    public void onClick(View v) {

        if(result.getText()==null)

        {

            result.setText("");

        }

        else

        {

            num1 = Float.parseFloat(result.getText().toString());

            res=res+num1;

            result.setText(null);

            num1=0;

            currentOperation = plus //plus is public static final int plus = 1


        }

    }

});

并使用 switch 语句更新 '='listener,


equal.setOnClickListener(new View.OnClickListener() {

    @Override

    public void onClick(View v) {

            num1 = Float.parseFloat(result.getText().toString());

            switch(currentOperation){

                  case plus:

                       res=res+num1;

                       break;

                  case minus:

                       res=res-num1;

                       break;

                  case divide:

                       res=res/num1;

                       break;

                  case multiply:

                       res=res*num1;

                       break;

            }



            result.setText(""+ res);

            num1=0;

    }

});


查看完整回答
反对 回复 2021-11-03
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

您没有读取第二个数字(运算符右侧)的值。= 按钮的 OnClickListener 除了显示 res 之外什么都不做。它不适用于运算符的右手,即第二个数字

例如 1 + 2 = 3

Step 1 按1 Step 2 按+,程序会得到算符的左边,加载到num1,加到res。Step 3 按2 Step 4 按=,程序会显示res

如果您想实时查看程序正在执行的操作,请尝试使用“调试”工具,您可以在其中逐行逐步执行程序并查看哪些变量被设置为额外的变量。


查看完整回答
反对 回复 2021-11-03
?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

您还应该从用户那里获取第二个值,并分别在每个运算符函数中进行计算。

您的所有运算符功能都存在逻辑错误。每当调用特定函数时,您都应该在所有运算符中添加此行。


result.setText(num1 - num2 + "");


result.setText(num1 + num2 + "");

等等!!!


您通过为操作创建匿名函数而使用了错误的技术。请您切换嵌套的 if-else 语句。


查看完整回答
反对 回复 2021-11-03
  • 3 回答
  • 0 关注
  • 137 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信