Android考试分数计算APP小数输入时点击计算崩溃求助
解决考试分数计算APP输入小数崩溃的问题
嘿,我一眼就看出问题出在哪了!你的APP在输入小数时崩溃,核心原因是你用了Integer.parseInt()去解析带小数的字符串——这个方法只能处理纯整数的文本,遇到像"85.5"这样的内容时,会直接抛出NumberFormatException,导致APP崩溃。
另外还有个隐藏问题:你用int类型存储分数,就算输入是整数,计算过程中的整数除法(比如(num1 + num2 + num3 + num4) / 4)会丢失小数部分,结果精度会打折扣。
修复方案
我给你调整了代码,解决了这两个问题:
- 把存储分数的变量从
int改成float,支持小数输入和计算 - 用
Float.parseFloat()替代Integer.parseInt()解析输入 - 增加异常捕获,处理空输入或无效数字的情况,避免崩溃
- 确保计算过程是浮点运算,保留精度
修改后的完整代码:
public class MainActivity extends AppCompatActivity { TextView Result; EditText Number1, Number2, Number3, Number4, Number5, Number6; Button Calculate; float result_num; float num1, num2, num3, num4, num5, num6; // 改成float类型 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Result = findViewById(R.id.Result); Number1 = findViewById(R.id.Number1); Number2 = findViewById(R.id.Number2); Number3 = findViewById(R.id.Number3); Number4 = findViewById(R.id.Number4); Number5 = findViewById(R.id.Number5); Number6 = findViewById(R.id.Number6); Calculate = findViewById(R.id.Calculate); Calculate.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { try { // 用Float.parseFloat解析,支持小数 num1 = Float.parseFloat(Number1.getText().toString().trim()); num2 = Float.parseFloat(Number2.getText().toString().trim()); num3 = Float.parseFloat(Number3.getText().toString().trim()); num4 = Float.parseFloat(Number4.getText().toString().trim()); num5 = Float.parseFloat(Number5.getText().toString().trim()); num6 = Float.parseFloat(Number6.getText().toString().trim()); // 浮点运算,保留精度 float average1 = (num1 + num2 + num3 + num4) / 4.0f; float part1 = average1 * 20 / 100; float average2 = (num5 + num6) / 2.0f; float part2 = average2 * 80 / 100; result_num = part1 + part2; Result.setText(String.format("%.2f", result_num)); // 格式化显示两位小数,更友好 } catch (NumberFormatException e) { // 处理无效输入的情况,给用户提示 Result.setText("请输入有效的数字!"); } } }); } }
关键改动说明
- 变量类型调整:把所有分数变量改成
float,既能接收小数输入,也能保留计算过程中的精度。 - 解析方法替换:
Float.parseFloat()可以正确解析带小数的字符串,比如"90.5"会被转换成90.5f。 - 异常捕获:用
try-catch包裹解析和计算逻辑,当用户输入空内容、非数字字符时,不会崩溃,而是显示友好提示。 - 计算精度优化:除法运算用
4.0f、2.0f代替整数,确保是浮点除法,避免丢失小数部分。 - 结果格式化:用
String.format("%.2f", result_num)把结果显示为两位小数,更符合分数的展示习惯。
这样修改后,不管输入整数还是小数,APP都能正常计算,再也不会崩溃啦!
内容的提问来源于stack exchange,提问作者SilviuZLD
相关产品推荐
相关产品推荐

