[英]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;
}
}
});
}
}
首先尝试构建逻辑,不断问自己,可以做什么以及如何做?
在工程或学校,你可能听过这样的话:
( +, - , *, / )
( 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
你有很多重复。 因此,当您要为任何按钮更改某些内容时,您必须为每个其他按钮进行修改。 尝试使用一种为每个按钮添加整个侦听器的方法来减少代码行数。 通过这种方式,您还将拥有一个更干净的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.