'onButtonClick(View)' 已定义并且需要常量表达式

问题描述 投票:0回答:1

我试图在 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 但出现另一个问题

android-studio
1个回答
0
投票

您使用相同的参数类型声明函数

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;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.