Android计算器App开发中x²按钮异常崩溃问题求助
计算器x²按钮崩溃问题修复
你的App崩溃的核心原因是:当输入内容是1+这类包含非数字字符的字符串时,Double.parseDouble()会抛出NumberFormatException,而原代码只处理了空输入的情况,没有捕获这个异常,导致App崩溃。
以下是修复后的代码,整合了异常捕获和输入验证逻辑:
bsquare.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String input = tvMain.getText().toString().trim(); // 处理空输入 if (input.isEmpty()) { Toast.makeText(MainActivity.this, "请输入有效数字", Toast.LENGTH_SHORT).show(); return; } // 用正则提前验证输入是否为有效数字,拦截异常场景 String validNumberPattern = "^-?\\d+(\\.\\d+)?$"; if (!input.matches(validNumberPattern)) { Toast.makeText(MainActivity.this, "请输入有效数字", Toast.LENGTH_SHORT).show(); return; } // 执行平方计算 try { double d = Double.parseDouble(input); double square = d * d; tvMain.setText(String.valueOf(square)); tvsec.setText(d + "²"); } catch (NumberFormatException e) { // 兜底异常处理,避免极端情况崩溃 Toast.makeText(MainActivity.this, "请输入有效数字", Toast.LENGTH_SHORT).show(); } } });
关键修复点:
- 新增正则表达式验证,提前过滤
1+这类不符合数字格式的输入,从根源避免异常抛出 - 将数字解析逻辑包裹在
try-catch块中,即使出现未预料到的格式问题,也能捕获异常并提示用户,防止App崩溃 - 保留空输入的快速判断,提升用户反馈效率
如果不想用正则,也可以简化成只依赖try-catch的版本:
bsquare.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String input = tvMain.getText().toString().trim(); try { double d = Double.parseDouble(input); double square = d * d; tvMain.setText(String.valueOf(square)); tvsec.setText(d + "²"); } catch (NumberFormatException e) { Toast.makeText(MainActivity.this, "请输入有效数字", Toast.LENGTH_SHORT).show(); } } });
这个版本会自动处理空输入(空字符串解析时也会抛NumberFormatException)和带运算符的输入,同样能防止崩溃。
内容的提问来源于stack exchange,提问作者Abhijit Zende
相关产品推荐
相关产品推荐

