制作计算器时值未更新

时间:2018-10-06 16:36:10

标签: java android

我在android studio中制作了一个简单的应用程序。我已经使用一个单一的textview接受两个数字。我还为10位数字,4个操作和小数点设置了按钮,并等于它。

我的应用无法读取第二个数字。当我按“ =”按钮时,它仅显示第一个数字。 例如,当我输入数字25并按“ +”按钮时,该数字将存储在float变量res中,并且清除了textview。现在,如果我输入第二个数字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;

        }
    });

num1res都是浮点型的,都初始化为0。

编辑:-添加完整的Java代码。

public class Calculator extends AppCompatActivity {
TextView result;
Button one,two,three,four,five,six,seven,eight,nine,zero,sum,sub,mul,div,decimal,equal;
float num1,num2,res=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_calculator);
    result = findViewById(R.id.result);
    one = findViewById(R.id.button_one);
    two = findViewById(R.id.button_two);
    three = findViewById(R.id.button_three);
    four = findViewById(R.id.button_four);
    five = findViewById(R.id.button_five);
    six = findViewById(R.id.button_six);
    seven = findViewById(R.id.button_seven);
    eight = findViewById(R.id.button_eight);
    nine = findViewById(R.id.button_nine);
    zero = findViewById(R.id.button_zero);
    sum = findViewById(R.id.button_add);
    sub = findViewById(R.id.button_sub);
    mul = findViewById(R.id.button_mul);
    div = findViewById(R.id.button_div);
    decimal = findViewById(R.id.button_decimal);
    equal = findViewById(R.id.button_equal);
    one.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            result.setText(result.getText() + "1");

        }
    });
    two.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            result.setText(result.getText() + "2");

        }
    });
    three.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            result.setText(result.getText() + "3");

        }
    });
    four.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            result.setText(result.getText() + "4");

        }
    });
    five.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            result.setText(result.getText() + "5");

        }
    });
    six.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            result.setText(result.getText() + "6");

        }
    });
    seven.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            result.setText(result.getText() + "7");

        }
    });
    eight.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            result.setText(result.getText() + "8");

        }
    });
    nine.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            result.setText(result.getText() + "9");

        }
    });
    zero.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            result.setText(result.getText() + "0");

        }
    });
    decimal.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            result.setText(result.getText() + ".");

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

            }
        }
    });
    sub.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(result.getText()==null)
            {
                result.setText("");
            }
            else
            {
                num1 = Float.parseFloat(result.getText() + "");
                res=res-num1;
                result.setText(null);
            }
        }
    });
    mul.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(result.getText()==null)
            {
                result.setText("");
            }
            else
            {
                num1 = Float.parseFloat(result.getText() + "");
                res=res/num1;
                result.setText(null);
            }
        }
    });
    div.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(result.getText()==null)
            {
                result.setText("");
            }
            else
            {
                num1 = Float.parseFloat(result.getText() + "");
                res=res/num1;
                result.setText(null);
            }
        }
    });
    equal.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

                result.setText(Float.toString(res));
                res=0;

        }
    });


}
}

3 个答案:

答案 0 :(得分:0)

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

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

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

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

等等!

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

答案 1 :(得分:0)

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

例如1 + 2 = 3

步骤1按1 步骤2按+,程序将移至运算符的左侧,并将其加载到num1并将其添加到res。 步骤3按2 步骤4按=,程序将显示res

如果您想实时查看程序的运行状况,请尝试使用“调试”工具,在其中可以逐行浏览程序,并查看将哪些变量设置为多余的变量。

答案 2 :(得分:0)

为操作员使用开关盒, 假设以下是字段;

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语句更新'='lisetener,

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