如何修复Java中出现的possible lossy conversion(有损转换)报错
报错原因分析
- Java语法强制要求数组下标必须为
int整数类型,你代码中用来当下标的变量j被定义为了double类型,直接用在A[j]的位置时,编译器会判定double转int可能存在精度丢失,直接抛出对应错误。 - 额外的逻辑问题:你当前代码里的平均值变量
ave还没有完成计算赋值,直接存入数组也得不到正确结果,同时声明两个Scanner对象属于冗余代码。
修复方案
- 把用作数组下标的变量改为
int类型,如果你要把平均值存入数组的第一个位置,直接用0当下标即可,无需额外声明j变量 - 补全平均值计算逻辑:平均值 = 总和 / 有效输入元素个数
- 删除冗余的第二个Scanner对象,用完Scanner后主动关闭避免资源泄漏
修复后完整代码
import java.util.Scanner; public class LabScratch { public static void main(String args[]) { int i, sum = 0, ctr = 0; double ave = 0.0; double [] A = new double [10]; System.out.println("Enter 10 integers: "); Scanner input = new Scanner (System.in); for (i = 0; i < A.length; i++) { A[i] = input.nextDouble(); sum += A[i]; ctr++; } // 计算平均值,乘以1.0是为了避免整数除法截断小数 ave = sum * 1.0 / ctr; // 用int类型的0作为数组下标 A[0] = ave; System.out.println("\n平均值为:" + A[0]); input.close(); } }
内容的提问来源于stack exchange,提问作者din
相关产品推荐
相关产品推荐

