有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java创建计算器

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

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

共 (3) 个答案

  1. # 1 楼答案

    试着先建立逻辑,总是问自己,能做什么,怎么做

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

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

    What should happen when operands ( Numbers ) are pressed ?

    首先将布尔变量operandAdded设为false。比如:

    operandAdded = false;
    

    无论何时在每个数字事件中按下,都要使其成为现实

    What should happen when operators ( +, -, *, / ) are pressed ?

    首先将布尔变量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
    }
    

    希望能有帮助

  2. # 2 楼答案

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

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

    您还应该能够使用运算符按钮执行类似的操作。 如果你需要帮忙,我会帮你的。 通过这样做,您的代码将更易于阅读,这对我们是一个很大的帮助