我试图在 android studio 中制作一个简单的计算器,但收到一条错误消息,提示“onButtonClick(View)”已在“com.example.calculator.MainActivity”中定义,且需要常量表达式
这就是错误所在 public void onButtonClick(查看视图)
public void onButtonClick(View view){
Button button =(Button) view;
String buttonText = button.getText().toString();
}
private void calculateResult() {
String displayContent = display.getText().toString();
if (!displayContent.isEmpty()) {
try {
double displayedValue = Double.parseDouble(displayContent);
switch (lastOperation) {
case "+":
currentValue += displayedValue;
break;
case "-":
currentValue -= displayedValue;
break;
case "*":
currentValue *= displayedValue;
break;
case "/":
if (displayedValue != 0) {
currentValue /= displayedValue;
} else {
Toast.makeText(this, "Cannot divide by zero",
Toast.LENGTH_SHORT).show();
return;
}
break;
case "=":
currentValue = displayedValue;
break;
}
} catch (NumberFormatException e) {
Toast.makeText(this, "Invalid input", Toast.LENGTH_SHORT).show();
}
}
updateDsiplay(currentValue);
}
@SuppressLint("DefaultLocale")
private void updateDsiplay(double value){
DecimalFormat format= new DecimalFormat("0.############");
display.setText(format.format(value));
}
@SuppressLint("NonConstantResourceId")
public void onButtonClick(View view){
if(clearDisplay){
display.setText("");
clearDisplay = false;
}
switch (view.getId()){
case R.id.button_equal:
calculateResult();
lastOperation="=";
clearDisplay=true;
break;
case R.id.button_plus:
case R.id.button_minus:
case R.id.button_multiply:
case R.id.button_divide:
performOperation(((Button) view).getText().toString());
break;
case R.id.button_clear:
display.setText("");
currentValue = 0;
lastOperation = "=";
clearDisplay = false;
break;
default:
if (clearDisplay){
display.setText("");
currentValue=0;
clearDisplay=false;
}
String buttonText = ((Button) view).getText().toString();
display.append(buttonText);
break;
}
}
private void performOperation(String operation){
if(!display.getText().toString().isEmpty()){
calculateResult();
}
lastOperation=operation;
clearDisplay = true;
}
}
尝试组合两个 onButtonClick 但出现另一个问题
您使用相同的参数类型声明函数
onButtonClick
两次。这在 Java 中是不允许的,每个函数签名必须是唯一的。
带签名的两个函数
public void onButtonClick(View view){
// ...
}
可以合并为单个函数,如下所示:
public void onButtonClick(View view) {
Button button = (Button) view;
String buttonText = button.getText().toString();
if (clearDisplay){
display.setText("");
clearDisplay = false;
}
switch (view.getId()){
case R.id.button_equal:
calculateResult();
lastOperation = "=";
clearDisplay = true;
break;
case R.id.button_plus:
case R.id.button_minus:
case R.id.button_multiply:
case R.id.button_divide:
performOperation(buttonText);
break;
case R.id.button_clear:
display.setText("");
currentValue = 0;
lastOperation = "=";
clearDisplay = false;
break;
default:
if (clearDisplay){
display.setText("");
currentValue = 0;
clearDisplay = false;
}
display.append(buttonText);
break;
}
}