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;
}
}
});
}
}
# 1 楼答案
试着先建立逻辑,总是问自己,能做什么,怎么做
在工程或学校里,你可能听过这样的话:
( +, - , *, / )
( 0 to 9 )
首先将布尔变量
operandAdded
设为false。比如:无论何时在每个数字事件中按下,都要使其成为现实
首先将布尔变量
operatorAdded
设为false。比如:无论何时在每个操作员按下事件中,都要使其为真
现在,每当按下数字时,调用一个函数,该函数将检查2个布尔值:
希望能有帮助
# 2 楼答案
你有很多重复。 因此,当您要为任何按钮更改某些内容时,您必须为其他按钮进行修改。尽量减少代码行数,方法是为每个按钮添加整个侦听器。通过这种方式,您还将拥有一个cleaner
onCreate
方法然后,您可以像这样轻松添加所有按钮:
您还应该能够使用运算符按钮执行类似的操作。 如果你需要帮忙,我会帮你的。 通过这样做,您的代码将更易于阅读,这对我们是一个很大的帮助
# 3 楼答案
您可以使用Edittext而不是textview,并在其上实现文本更改侦听器。 因此,每当文本发生更改时,您都可以获得更改并进行实时计算
您可以使用以下URL作为参考:-
https://developer.android.com/reference/android/text/TextWatcher
android on Text Change Listener