package com.deitel.calculator;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Switch;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    double input1 = 0, input2 = 0d ,count=0;
    Button btn0, btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9, btn_dot, btn_equal, btn_subtract, btn_multi, btn_add, btn_devision, btn_clear, btn_back;
    TextView text_result;
    boolean Addition, Subtraction, Multiplication, Devision, decimal;

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


        btn0 = findViewById(R.id.btn0);
        btn1 = findViewById(R.id.btn1);
        btn2 = findViewById(R.id.btn2);
        btn3 = findViewById(R.id.btn3);
        btn4 = findViewById(R.id.btn4);
        btn5 = findViewById(R.id.btn5);
        btn6 = findViewById(R.id.btn6);
        btn7 = findViewById(R.id.btn7);
        btn8 = findViewById(R.id.btn8);
        btn9 = findViewById(R.id.btn9);
        btn_dot = findViewById(R.id.btn_dot);
        btn_equal = findViewById(R.id.btn_equal);
        btn_add = findViewById(R.id.btn_add);
        btn_subtract = findViewById(R.id.btn_subtract);
        btn_multi = findViewById(R.id.btn_multi);
        btn_devision = findViewById(R.id.btn_devision);
        btn_clear = findViewById(R.id.btn_clear);
        btn_back = findViewById(R.id.btn_back);
        text_result = findViewById(R.id.text_result);

        btn0.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                text_result.setText(text_result.getText() + "0");
            }
        });

        btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                text_result.setText(text_result.getText() + "1");

            }
        });

        btn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                text_result.setText(text_result.getText() + "2");
            }
        });

        btn3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                text_result.setText(text_result.getText() + "3");
            }
        });
        btn4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                text_result.setText(text_result.getText() + "4");
            }
        });
        btn5.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                text_result.setText(text_result.getText() + "5");
            }
        });
        btn6.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                text_result.setText(text_result.getText() + "6");
            }
        });
        btn7.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                text_result.setText(text_result.getText() + "7");
            }
        });
        btn8.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                text_result.setText(text_result.getText() + "8");
            }
        });
        btn9.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                text_result.setText(text_result.getText() + "9");
            }
        });
        btn_add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (text_result.getText().length() != 0) {
                    input1 = Float.parseFloat(text_result.getText() + "");
                    Addition = true;
                    decimal = false;
                    text_result.setText(null);
                }
            }
        });
        btn_subtract.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {

                if (text_result.getText().length() != 0) {
                    input1 = Float.parseFloat(text_result.getText() + "");
                    Subtraction = true;
                    decimal = false;
                    text_result.setText(null);
                }

            }
        });

        btn_multi.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                if (text_result.getText().length() != 0) {
                    input1 = Float.parseFloat(text_result.getText() + "");
                    Multiplication = true;
                    decimal = false;
                    text_result.setText(null);
                }


            }
        });

        btn_devision.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                if (text_result.getText().length() != 0) {
                    input1 = Float.parseFloat(text_result.getText() + "");
                    Devision = true;
                    decimal = false;
                    text_result.setText(null);

                }

            }
        });
        btn_clear.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                text_result.setText("");
                input1 = 0.0;
                input1 = 0.0;
            }

        });
        btn_dot.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                if(count==0){
                    count=1;
                        text_result.setText(text_result.getText()+".");
                        return;
                    }
                else{
                        text_result.setText(text_result.getText()+"0.");
                        decimal=true;
                    }
            }
        });
        btn_back.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String number = text_result.getText().toString();
                int input = number.length();
                if (input > 0) {
                    text_result.setText(number.substring(0, input - 1));
                }
            }
        });

        btn_equal.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                count=0;
                if ((Addition || Subtraction || Multiplication || Devision) ) {
                    if (text_result.getText().toString().trim().equals("")){
                   input2=0;
                    return;

                    }else {
                        input2 = Float.parseFloat(text_result.getText() + "");
                    }

                }
                if (Addition) {
                    text_result.setText(input1 + input2 + "");
                    Addition = false;
                }

                if (Subtraction) {
                    text_result.setText(input1 - input2 + "");
                    Subtraction = false;
                }
                if (Multiplication) {
                    text_result.setText(input1 * input2 + "");
                    Multiplication = false;
                }
                if (Devision) {
                    text_result.setText(input1 / input2 + "");
                    Devision = false;
                }

            }
        });


    }
}


当我按下点按钮时,我希望该点按钮仅在输入1中按下一次,例如:2.5 + 3.7等。
但是此代码不满足该要求-它显示2.3.4.5等。但是我只希望在一个输入中输入一个点。当我按下点按钮时,我希望该点按钮仅在输入1中按下一次,例如:2.5 + 3.7等。

最佳答案

在这里,您可以使用简单的标志进行管理。

public class MainActivity extends AppCompatActivity {
// IDs of all the numeric buttons
private int[] numericButtons = {R.id.btnZero, R.id.btnOne, R.id.btnTwo, R.id.btnThree, R.id.btnFour, R.id.btnFive, R.id.btnSix, R.id.btnSeven, R.id.btnEight, R.id.btnNine};
// IDs of all the operator buttons
private int[] operatorButtons = {R.id.btnAdd, R.id.btnSubtract, R.id.btnMultiply, R.id.btnDivide};
// TextView used to display the output
private TextView txtScreen;
// Represent whether the lastly pressed key is numeric or not
private boolean lastNumeric;
// Represent that current state is in error or not
private boolean stateError;
// If true, do not allow to add another DOT
private boolean lastDot;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    // Find the TextView
    this.txtScreen = (TextView) findViewById(R.id.txtScreen);
    // Find and set OnClickListener to numeric buttons
    setNumericOnClickListener();
    // Find and set OnClickListener to operator buttons, equal button and decimal point button
    setOperatorOnClickListener();
}

/**
 * Find and set OnClickListener to numeric buttons.
 */
private void setNumericOnClickListener() {
    // Create a common OnClickListener
    View.OnClickListener listener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // Just append/set the text of clicked button
            Button button = (Button) v;
            if (stateError) {
                // If current state is Error, replace the error message
                txtScreen.setText(button.getText());
                stateError = false;
            } else {
                // If not, already there is a valid expression so append to it
                txtScreen.append(button.getText());
            }
            // Set the flag
            lastNumeric = true;
        }
    };
    // Assign the listener to all the numeric buttons
    for (int id : numericButtons) {
        findViewById(id).setOnClickListener(listener);
    }
}

/**
 * Find and set OnClickListener to operator buttons, equal button and decimal point button.
 */
private void setOperatorOnClickListener() {
    // Create a common OnClickListener for operators
    View.OnClickListener listener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // If the current state is Error do not append the operator
            // If the last input is number only, append the operator
            if (lastNumeric && !stateError) {
                Button button = (Button) v;
                txtScreen.append(button.getText());
                lastNumeric = false;
                lastDot = false;    // Reset the DOT flag
            }
        }
    };
    // Assign the listener to all the operator buttons
    for (int id : operatorButtons) {
        findViewById(id).setOnClickListener(listener);
    }
    // Decimal point
    findViewById(R.id.btnDot).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (lastNumeric && !stateError && !lastDot) {
                txtScreen.append(".");
                lastNumeric = false;
                lastDot = true;
            }
        }
    });
    // Clear button
    findViewById(R.id.btnClear).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            txtScreen.setText("");  // Clear the screen
            // Reset all the states and flags
            lastNumeric = false;
            stateError = false;
            lastDot = false;
        }
    });
    // Equal button
    findViewById(R.id.btnEqual).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            onEqual();
        }
    });
}

/**
 * Logic to calculate the solution.
 */
private void onEqual() {
    // If the current state is error, nothing to do.
    // If the last input is a number only, solution can be found.
    if (lastNumeric && !stateError) {
        // Read the expression
        String txt = txtScreen.getText().toString();
        // Create an Expression (A class from exp4j library)
        Expression expression = new ExpressionBuilder(txt).build();
        try {
            // Calculate the result and display
            double result = expression.evaluate();
            txtScreen.setText(Double.toString(result));
            lastDot = true; // Result contains a dot
        } catch (ArithmeticException ex) {
            // Display an error message
            txtScreen.setText("Error");
            stateError = true;
            lastNumeric = false;
        }
    }
}

}

10-06 10:54