猿问

制作计算器时值未更新

我在 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。


繁星coding
浏览 144回答 3
3回答

慕运维8079593

对运算符使用 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;    }});

叮当猫咪

您没有读取第二个数字(运算符右侧)的值。= 按钮的 OnClickListener 除了显示 res 之外什么都不做。它不适用于运算符的右手,即第二个数字例如 1 + 2 = 3Step 1 按1 Step 2 按+,程序会得到算符的左边,加载到num1,加到res。Step 3 按2 Step 4 按=,程序会显示res如果您想实时查看程序正在执行的操作,请尝试使用“调试”工具,您可以在其中逐行逐步执行程序并查看哪些变量被设置为额外的变量。

慕田峪9158850

您还应该从用户那里获取第二个值,并分别在每个运算符函数中进行计算。您的所有运算符功能都存在逻辑错误。每当调用特定函数时,您都应该在所有运算符中添加此行。result.setText(num1 - num2 + "");result.setText(num1 + num2 + "");等等!!!您通过为操作创建匿名函数而使用了错误的技术。请您切换嵌套的 if-else 语句。
随时随地看视频慕课网APP

相关分类

Java
我要回答