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

Java代码报错修复求助:double转int精度丢失、boolean无法转int

编译错误修复方案

错误根源分析

你遇到的两个编译错误直接来自TestApplicants.java中调用customFilter方法时的参数错误:

  • double转int的损失性转换错误:你在int[]数组中传入了4.0、3.2这类double类型数值,Java不允许自动将带小数的浮点型转换为整型(会丢失精度)。
  • boolean转int错误:你在int[]数组中传入了true、false这类布尔值,布尔类型和整型之间没有自动转换规则。

你提到替换int为double未解决问题,是因为只修改了部分类型,没有匹配方法参数和调用逻辑的整体调整。

具体修复步骤

1. 修正Applicants.java的customFilter方法

调整方法参数类型以兼容多种数据类型,同时修复整数除法的精度丢失问题:

public class Applicants {
    // 保留原有代码(构造器、getter/setter、其他分析方法)不变,仅修改customFilter方法
    public boolean customFilter(Object[] data){
        int sum = 0;
        int count = 0;
        for (int i = 0; i < data.length; i++){
            if (i < 6){
                // 前6项为课程成绩,强制转换为int
                sum += (int) data[i];
            }
            else if (i >=6 && data[i] instanceof Double){
                // 第7项及以后为GPA(double类型),判断是否大于3.5
                double gpa = (Double) data[i];
                if (gpa > 3.5){
                    count++;
                }
            }
        }
        // 用6.0触发浮点除法,避免精度丢失
        double average = sum / 6.0;
        return (average > 70 && count > 0);
    }
}

2. 修正TestApplicants.java的customFilter调用

将传入的数组改为Object[],移除无意义的布尔值(原逻辑未使用布尔参数,属于误传):

public class TestApplicants {
    public static void main(String[] args){
        Applicants applicant1 = new Applicants("John Doe", new int[]{90, 95, 80, 100, 75, 95});
        System.out.println(applicant1.averageAbove85()); //true
        System.out.println(applicant1.noGradeBelow65()); //true
        System.out.println(applicant1.atleastFour85()); //false
        System.out.println(applicant1.upperLevelAbove85()); //true
        // 修改为Object数组,移除多余的true
        System.out.println(applicant1.customFilter(new Object[]{90, 95, 80, 100, 75, 95, 4.0, 3})); //true

        Applicants applicant2 = new Applicants("Jane Doe", new int[]{60, 70, 80, 85, 95, 100});
        System.out.println(applicant2.averageAbove85()); //true
        System.out.println(applicant2.noGradeBelow65()); //false
        System.out.println(applicant2.atleastFour85()); //true
        System.out.println(applicant2.upperLevelAbove85()); //true
        // 修改为Object数组,移除多余的false
        System.out.println(applicant2.customFilter(new Object[]{60, 70, 80, 85, 95, 100, 3.2, 1})); //false
    }
}

3. 额外修复:其他方法的整数除法精度问题

原代码中averageAbove85、upperLevelAbove85方法存在整数除法导致的精度丢失,比如总分435除以6门课,整数除法会得到72而非72.5,可能导致判断错误,建议同步修改:

// 修改averageAbove85方法中的平均计算
double average = sum / (double) academicData.length;

// 修改upperLevelAbove85方法中的平均计算
double average = sum / 4.0;

修复后运行结果

修复后代码可正常编译运行,输出与你注释预期一致:

true
true
false
true
true
true
false
true
true
false

内容的提问来源于stack exchange,提问作者Karzh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 03:35:20