You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android考试分数计算APP小数输入时点击计算崩溃求助

解决考试分数计算APP输入小数崩溃的问题

嘿,我一眼就看出问题出在哪了!你的APP在输入小数时崩溃,核心原因是你用了Integer.parseInt()去解析带小数的字符串——这个方法只能处理纯整数的文本,遇到像"85.5"这样的内容时,会直接抛出NumberFormatException,导致APP崩溃。

另外还有个隐藏问题:你用int类型存储分数,就算输入是整数,计算过程中的整数除法(比如(num1 + num2 + num3 + num4) / 4)会丢失小数部分,结果精度会打折扣。

修复方案

我给你调整了代码,解决了这两个问题:

  1. 把存储分数的变量从int改成float,支持小数输入和计算
  2. 用Float.parseFloat()替代Integer.parseInt()解析输入
  3. 增加异常捕获,处理空输入或无效数字的情况,避免崩溃
  4. 确保计算过程是浮点运算,保留精度

修改后的完整代码:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:10:24