Android - 如何点击按钮我怎么记得?

时间:2017-03-16 20:26:11

标签: java android if-statement button textview

我正在构建一个计算器,它使用两个textView作为输入,一个textView作为结果框。当我按下+, - ,x或/按钮时,程序将切换到textView2并继续输入数字。然后单击=按钮执行计算。

当我点击=按钮时程序忘记按下+, - ,x或/按钮,这样它就不会知道它应该如何计算。

有没有办法可以“记住”第一个按钮点击,以便我可以用它来确定要计算的内容?

  

Android代码更新,V2

    package com.example.tristan.assn2;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;


public class MainActivity extends AppCompatActivity {

    TextView operand1, operand2,result,tv;
    int operation;

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

        operand1 = (TextView) findViewById(R.id.textView);
        operand2 = (TextView) findViewById(R.id.textView2);

        result= (TextView) findViewById(R.id.textView3);
        tv=operand1;
    }

    public void sendMessage(View v) {
        if (v.getId() == R.id.button18 || v.getId() == R.id.button15 || v.getId() == R.id.button17 || v.getId() == R.id.button21 || v.getId() == R.id.button18) {
            tv=operand2;
        }

        if (v.getId() == R.id.button) {
            tv.setText(tv.getText() + "1");
        }
        if (v.getId() == R.id.button2) {
            tv.setText(tv.getText() + "2");
        }
        if (v.getId() == R.id.button3) {
            tv.setText(tv.getText() + "3");
        }
        if (v.getId() == R.id.button4) {
            tv.setText(tv.getText() + "4");
        }
        if (v.getId() == R.id.button5) {
            tv.setText(tv.getText() + "5");
        }
        if (v.getId() == R.id.button6) {
            tv.setText(tv.getText() + "6");
        }
        if (v.getId() == R.id.button7) {
            tv.setText(tv.getText() + "7");
        }
        if (v.getId() == R.id.button8) {
            tv.setText(tv.getText() + "8");
        }
        if (v.getId() == R.id.button9) {
            tv.setText(tv.getText() + "9");
        }
        if (v.getId() == R.id.button10) {
            tv.setText(tv.getText() + "0");
        }
        if (v.getId() == R.id.button11) {
            tv.setText(tv.getText() + ".");
        }




        Button plus =  (Button) findViewById(R.id.button17);
        Button minus =  (Button) findViewById(R.id.button15);
        Button mult =  (Button) findViewById(R.id.button18);
        Button div =  (Button) findViewById(R.id.button21);

            //plus
        if(v.getId()==R.id.button17){
            operation = 1;
        }
        //minus
        if(v.getId()==R.id.button15){
            operation = 2;
        }
        //mult
        if(v.getId()==R.id.button18){
            operation = 3;
        }
        //div
        if(v.getId()==R.id.button21){
            operation = 4;
        }


        int op1, op2;
        switch(operation){
            case 1:
                op1=Integer.parseInt(operand1.getText().toString());
                op2=Integer.parseInt(operand2.getText().toString());
                op2+=op1;
                if(v.getId()==R.id.button23){
                    result.setText(op2+"");
                    tv=operand1;
                }
                break;
            case 2:
                op1=Integer.parseInt(operand1.getText().toString());
                op2=Integer.parseInt(operand2.getText().toString());
                op2-=op1;
                if(v.getId()==R.id.button23){
                    result.setText(op2+"");
                    tv=operand1;
                }
                break;
            case 3:
                op1=Integer.parseInt(operand1.getText().toString());
                op2=Integer.parseInt(operand2.getText().toString());
                op2*=op1;
                if(v.getId()==R.id.button23){
                    result.setText(op2+"");
                    tv=operand1;
                }
                break;
            case 4:
                op1=Integer.parseInt(operand1.getText().toString());
                op2=Integer.parseInt(operand2.getText().toString());
                op2/=op1;
                if(v.getId()==R.id.button23){
                    result.setText(op2+"");
                    tv=operand1;
                }
                break;
        }

    }
}
  

如何分配操作?

    //plus
    if(v.getId()==R.id.button17){
        operation = 1;
    }
    //minus
    if(v.getId()==R.id.button15){
        operation = 2;
    }
    //mult
    if(v.getId()==R.id.button18){
        operation = 3;
    }
    //div
    if(v.getId()==R.id.button21){
        operation = 4;
    }

3 个答案:

答案 0 :(得分:0)

private String operation;

在每个操作的输出中,您写道: 对于加号:

operation = "+";

对于减号:

operation = "-";

对于div:

operation = "/";

依旧...... 对于选中,请查询变量操作。 切换或如果。

switch (operation) { 
    case "+": 
        //Your operation 
        break; 
    case "-": 
        //Your operation  
        break;
    case "/": 
        //Your operation  
        break;
}

答案 1 :(得分:0)

您应该在Activity中的某个位置创建一个变量,用于存储按下的按钮(加号,减号等)的表示形式。这可能只是一个字符串值,表示“加号”,“减号”等。然后为每个操作员按钮实现OnClickListener,适当地设置变量。然后你可以检查这个变量来看看执行了什么操作。

此外,您可以将它们合并为一个if语句,而不是根据v.getId() == R.id.button23语句将其组合为if,而不是以op2开头的四个Vue.component("formatted-number",{ props:["value", "decimals"], data(){ return { internalValue: this.format(this.value) } }, methods:{ format(value){ return parseFloat(value).toFixed(this.decimals || 2);}, onChange(){this.$emit('input', this.format(this.internalValue))} }, template:'<input type="text" v-model="internalValue" @input="onChange" />' }) 语句。运算符变量的值。

答案 2 :(得分:0)

我会为此使用堆栈。例如,当您点击1时,将其添加到堆栈。当你点击+添加到堆栈。当你拿3时,将它添加到堆栈。然后,您可以将每个项目从状态中弹出,无论操作员是什么,您都可以执行该功能.....

您可以确定将每个项目从堆栈中弹出时的内容。如果#,存储在var1中,如果+, - ,/,*,则执行其他操作....按此方式执行此操作将允许您跟踪堆栈中的所有内容。

要注意的一件事是,如果你按顺序将8,3,1放在堆叠上,当你弹出它们时,它将是1,3,8。