繁体   English   中英

创建计算器

[英]Creating a calculator

我正在尝试在 android studio 上构建一个计算器。 我的问题是,为了从任一值中获得解决方案,用户必须按下“等于”按钮。 我试图避免这种情况,并在 TextView 中显示实时计算(当两个数字与加法符号组合时,一旦调用第二个运算符,就会出现总和)。 如果有人能给我提供一些很棒的见解,我还不是一个非常有经验的 android 开发人员。 谢谢!

public class MainActivity extends AppCompatActivity {

Button button0, button1, button2, button3, button4, button5, button6, button7, button8,
button9, buttonAdd, buttonSub, buttonMult, buttonDiv, buttonDec, buttonEqual, buttonAC;

TextView calculate;

boolean addition, subtraction, division, multiplication;

float first, second;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    button0 = (Button) findViewById(R.id.button_num0);
    button1 = (Button) findViewById(R.id.button_num1);
    button2 = (Button) findViewById(R.id.button_num2);
    button3 = (Button) findViewById(R.id.button_num3);
    button4 = (Button) findViewById(R.id.button_num4);
    button5 = (Button) findViewById(R.id.button_num5);
    button6 = (Button) findViewById(R.id.button_num6);
    button7 = (Button) findViewById(R.id.button_num7);
    button8 = (Button) findViewById(R.id.button_num8);
    button9 = (Button) findViewById(R.id.button_num9);
    buttonAdd = (Button) findViewById(R.id.button_add);
    buttonSub = (Button) findViewById(R.id.button_subtract);
    buttonDiv = (Button) findViewById(R.id.button_divide);
    buttonMult = (Button) findViewById(R.id.button_multiply);
    buttonDec = (Button) findViewById(R.id.button_decimal);
    buttonEqual = (Button) findViewById(R.id.button_equal);
    buttonAC = (Button) findViewById(R.id.button_clear);

    calculate = (TextView) findViewById(R.id.text_current);

    button0.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            calculate.setText(calculate.getText() + button0.getText().toString());
        }
    });
    button1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            calculate.setText(calculate.getText() + button1.getText().toString());
        }
    });
    button2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            calculate.setText(calculate.getText() + button2.getText().toString());
        }
    });
    button3.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            calculate.setText(calculate.getText() + button3.getText().toString());
        }
    });
    button4.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            calculate.setText(calculate.getText() + button4.getText().toString());
        }
    });
    button5.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            calculate.setText(calculate.getText() + button5.getText().toString());
        }
    });
    button6.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            calculate.setText(calculate.getText() + button6.getText().toString());
        }
    });
    button7.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            calculate.setText(calculate.getText() + button7.getText().toString());
        }
    });
    button8.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            calculate.setText(calculate.getText() + button8.getText().toString());
        }
    });
    button9.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            calculate.setText(calculate.getText() + button9.getText().toString());
        }
    });
    buttonAdd.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (calculate.getText().equals(null)) {
                calculate.setText("");
            }
            else {
                first = Float.parseFloat(calculate.getText() + "");
                calculate.setText(calculate.getText() + "+");
                addition = true;
                calculate.setText(null);
            }
        }
    });
    buttonDec.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (calculate.getText().equals(null)) {
                calculate.setText("");
            }
            else {
                calculate.setText(calculate.getText() + ".");
            }
        }
    });
    buttonMult.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (calculate.getText().equals(null)) {
                calculate.setText("");
            }
            else {
                first = Float.parseFloat(calculate.getText() + "");
                calculate.setText(calculate.getText() + "*");
                multiplication = true;
                calculate.setText(null);
            }
        }
    });
    buttonSub.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (calculate.getText().equals(null)) {
                calculate.setText("");
            }
            else {
                first = Float.parseFloat(calculate.getText() + "");
                calculate.setText(calculate.getText() + "-");
                subtraction = true;
                calculate.setText(null);
            }
        }
    });
    buttonDiv.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (calculate.getText().equals(null)) {
                calculate.setText("");
            }
            else {
                first = Float.parseFloat(calculate.getText() + "");
                calculate.setText(calculate.getText() + "/");
                division = true;
                calculate.setText(null);
            }
        }
    });
    buttonEqual.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            second = Float.parseFloat(calculate.getText() + "");

            if (addition ==  true) {
                calculate.setText(first + second + "");
                addition = false;
            }
            if (subtraction ==  true) {
                calculate.setText(first - second + "");
                subtraction = false;
            }
            if (multiplication ==  true) {
                calculate.setText(first * second + "");
                multiplication = false;
            }
            if (division ==  true) {
                calculate.setText(first / second + "");
                division = false;
            }
        }
    });
}
}

首先尝试构建逻辑,不断问自己,可以做什么以及如何做?

在工程或学校,你可能听过这样的话:

  1. 运算符( +, - , *, / )
  2. 操作数( 0 to 9 )

当操作数(数字)被按下时会发生什么?

首先将布尔变量操作operandAdded为 false。 喜欢 :

operandAdded = false;

每当在每个数字中按下事件使其成为真。

按下运算符(+、-、*、/)时会发生什么?

首先将布尔变量operatorAdded为 false。 喜欢 :

operatorAdded = false;

每当在每个操作员按下事件时,使其为真。

现在,每当按下数字时,都会调用一个函数来检查 2 个布尔值:

if (operatorAdded && operandAdded) {
     // this is where you will perform maths
     // this is where you show it in the textView
     // this is where make both false again
}

希望能帮助到你

您可以使用 Edittext 而不是 textview 并在其上实现文本更改侦听器。 因此,每当文本更改时,您都可以获得更改并进行实时计算。

您可以使用以下网址作为参考:-

https://developer.android.com/reference/android/text/TextWatcher

文本更改侦听器上的android

你有很多重复。 因此,当您要为任何按钮更改某些内容时,您必须为每个其他按钮进行修改。 尝试使用一种为每个按钮添加整个侦听器的方法来减少代码行数。 通过这种方式,您还将拥有一个更干净的onCreate方法。

private void addListenerTo(int buttonId) {
    final Button button = (Button) findViewById(buttonId);
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            calculate.setText(calculate.getText() + button.getText().toString());
        }
    });
}

然后您可以轻松添加所有按钮,如下所示:

addListenerTo(R.id.button_num0);
addListenerTo(R.id.button_num1);
addListenerTo(R.id.button_num2);
addListenerTo(R.id.button_num3);
addListenerTo(R.id.button_num4);
addListenerTo(R.id.button_num5);
addListenerTo(R.id.button_num6);
addListenerTo(R.id.button_num7);
addListenerTo(R.id.button_num8);
addListenerTo(R.id.button_num9);

您还应该能够对操作员按钮执行类似操作。 如果你需要这方面的帮助,我会帮助你。 通过这样做,您的代码将更容易阅读,这对我们有很大帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM