Android Studio开发简易计算器遇两类报错:方法重复与常量表达式要求
解决方案
1. 解决重复方法定义错误
直接删除第一个空实现的onButtonClick(View)方法即可,它没有任何业务逻辑,属于冗余代码,这是导致第一个报错的直接原因。
2. 解决“需要常量表达式”错误
这个报错是因为重复方法导致编译中断引发的连锁问题,删除重复方法后,配合你已添加的@SuppressLint("NonConstantResourceId")注解,该错误会自动消失。
3. 修正潜在运行时错误
注意到方法名拼写错误:updateDsiplay应改为updateDisplay,否则运行时会因找不到方法崩溃。
修正后的代码片段
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(); } } updateDisplay(currentValue); } @SuppressLint("DefaultLocale") private void updateDisplay(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; }
内容的提问来源于stack exchange,提问作者Hurley Marley
相关产品推荐
相关产品推荐

