Java Android 上的计算器应用 Studio 无法正常运行
Java Calculator App On Android Studio isn't functioning how it is supposed to
我是初学者,如果这是一个愚蠢的错误或其他什么,请不要评判我。
我正在尝试使用 Java 和 android studio 制作一个计算器,但在加减乘法时似乎有问题。调试时,我发现添加时变量ans会自动变为0。这里有什么问题。请帮忙。
package com.example.simplecalculator;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
TextView tvHead;
EditText etDisplay;
Button btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9, btn0, btnPlus, btnMinus, btnDiv, btnMul, btnDot, btnEquals, btnClear;
float res1, res2;
float ans;
boolean add, subtract, divide, multiply;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvHead = findViewById(R.id.tvHead);
etDisplay = findViewById(R.id.etDisplay);
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);
btnPlus = findViewById(R.id.btnPlus);
btnMinus = findViewById(R.id.btnMinus);
btnMul = findViewById(R.id.btnMul);
btnDiv = findViewById(R.id.btnDiv);
btnDot = findViewById(R.id.btnDot);
btnEquals = findViewById(R.id.btnEquals);
btnClear = findViewById(R.id.btnClear);
btn0.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
etDisplay.setText(etDisplay.getText() + "0");
}
});
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
etDisplay.setText(etDisplay.getText() + "1");
}
});
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
etDisplay.setText(etDisplay.getText() +"2");
}
});
btn3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
etDisplay.setText(etDisplay.getText() + "3");
}
});
btn4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
etDisplay.setText(etDisplay.getText() + "4");
}
});
btn5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
etDisplay.setText(etDisplay.getText() + "5");
}
});
btn6.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
etDisplay.setText(etDisplay.getText() + "6");
}
});
btn7.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
etDisplay.setText(etDisplay.getText() + "7");
}
});
btn8.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
etDisplay.setText(etDisplay.getText() + "8");
}
});
btn9.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
etDisplay.setText(etDisplay.getText() + "9");
}
});
btnDot.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
etDisplay.setText(etDisplay.getText() + ".");
}
});
btnClear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
etDisplay.setText(null);
}
});
btnPlus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
res1 = Float.parseFloat(etDisplay.getText().toString());
etDisplay.setText(null);
add = true;
}
});
btnMinus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
res1 = Float.parseFloat(etDisplay.getText().toString());
etDisplay.setText(null);
subtract = true;
}
});
btnMul.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
res1 = Float.parseFloat(etDisplay.getText().toString());
etDisplay.setText(null);
multiply = true;
}
});
btnDiv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
res1 = Float.parseFloat(etDisplay.getText().toString());
etDisplay.setText(null);
divide = true;
}
});
btnEquals.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
res2 = Float.parseFloat(etDisplay.getText().toString());
if (etDisplay.getText().toString().isEmpty())
{
etDisplay.setText("");
}
if (add = true)
{
ans = res1 + res2;
add = false;
}
if (subtract = true)
{
ans = res1-res2;
subtract = false;
}
if (multiply = true)
{
ans = res1*res2;
multiply = false;
}
if (divide = true)
{
ans = res1/res2;
divide = false;
}
String answer = ans+"";
etDisplay.setText(answer);
}
});
}
}
您不小心为布尔值赋值,而不是检查它们是否为真:
if (add = true)
// ...
if (subtract = true)
// ...
if (multiply = true)
// ...
if (divide = true)
// ...
你应该用==
来比较,而不是=
。然而,对于boolean
,你根本不需要比较:
if (add)
// ...
if (subtract)
// ...
if (multiply)
// ...
if (divide)
// ...
您可以改进代码,对每个数字按钮使用相同的方法,并在 xml 中放置与数字对应的相同标签。例如
android:tag = "1"
btn1.setOnClickListener(onClickListener);
btn2.setOnClickListener(onClickListener);
btn3.setOnClickListener(onClickListener);
...
public View.OnClickListener onClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
etDisplay.setText(etDisplay.getText() + v.getTag().toString());
}
}
};
我是初学者,如果这是一个愚蠢的错误或其他什么,请不要评判我。 我正在尝试使用 Java 和 android studio 制作一个计算器,但在加减乘法时似乎有问题。调试时,我发现添加时变量ans会自动变为0。这里有什么问题。请帮忙。
package com.example.simplecalculator;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
TextView tvHead;
EditText etDisplay;
Button btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9, btn0, btnPlus, btnMinus, btnDiv, btnMul, btnDot, btnEquals, btnClear;
float res1, res2;
float ans;
boolean add, subtract, divide, multiply;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvHead = findViewById(R.id.tvHead);
etDisplay = findViewById(R.id.etDisplay);
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);
btnPlus = findViewById(R.id.btnPlus);
btnMinus = findViewById(R.id.btnMinus);
btnMul = findViewById(R.id.btnMul);
btnDiv = findViewById(R.id.btnDiv);
btnDot = findViewById(R.id.btnDot);
btnEquals = findViewById(R.id.btnEquals);
btnClear = findViewById(R.id.btnClear);
btn0.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
etDisplay.setText(etDisplay.getText() + "0");
}
});
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
etDisplay.setText(etDisplay.getText() + "1");
}
});
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
etDisplay.setText(etDisplay.getText() +"2");
}
});
btn3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
etDisplay.setText(etDisplay.getText() + "3");
}
});
btn4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
etDisplay.setText(etDisplay.getText() + "4");
}
});
btn5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
etDisplay.setText(etDisplay.getText() + "5");
}
});
btn6.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
etDisplay.setText(etDisplay.getText() + "6");
}
});
btn7.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
etDisplay.setText(etDisplay.getText() + "7");
}
});
btn8.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
etDisplay.setText(etDisplay.getText() + "8");
}
});
btn9.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
etDisplay.setText(etDisplay.getText() + "9");
}
});
btnDot.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
etDisplay.setText(etDisplay.getText() + ".");
}
});
btnClear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
etDisplay.setText(null);
}
});
btnPlus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
res1 = Float.parseFloat(etDisplay.getText().toString());
etDisplay.setText(null);
add = true;
}
});
btnMinus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
res1 = Float.parseFloat(etDisplay.getText().toString());
etDisplay.setText(null);
subtract = true;
}
});
btnMul.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
res1 = Float.parseFloat(etDisplay.getText().toString());
etDisplay.setText(null);
multiply = true;
}
});
btnDiv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
res1 = Float.parseFloat(etDisplay.getText().toString());
etDisplay.setText(null);
divide = true;
}
});
btnEquals.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
res2 = Float.parseFloat(etDisplay.getText().toString());
if (etDisplay.getText().toString().isEmpty())
{
etDisplay.setText("");
}
if (add = true)
{
ans = res1 + res2;
add = false;
}
if (subtract = true)
{
ans = res1-res2;
subtract = false;
}
if (multiply = true)
{
ans = res1*res2;
multiply = false;
}
if (divide = true)
{
ans = res1/res2;
divide = false;
}
String answer = ans+"";
etDisplay.setText(answer);
}
});
}
}
您不小心为布尔值赋值,而不是检查它们是否为真:
if (add = true) // ... if (subtract = true) // ... if (multiply = true) // ... if (divide = true) // ...
你应该用==
来比较,而不是=
。然而,对于boolean
,你根本不需要比较:
if (add)
// ...
if (subtract)
// ...
if (multiply)
// ...
if (divide)
// ...
您可以改进代码,对每个数字按钮使用相同的方法,并在 xml 中放置与数字对应的相同标签。例如
android:tag = "1"
btn1.setOnClickListener(onClickListener);
btn2.setOnClickListener(onClickListener);
btn3.setOnClickListener(onClickListener);
...
public View.OnClickListener onClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
etDisplay.setText(etDisplay.getText() + v.getTag().toString());
}
}
};