Java编译错误求助:int与double损失转换问题(sortedTemps方法报错)
问题排查与修复:Java数组排序的类型不兼容错误
嘿,我来帮你揪出这个错误的根源!你遇到的incompatible types: possible lossy conversion from double to int错误,其实和hold的类型没关系——问题出在数组索引的类型要求以及你写的indexOfLargestElement方法的类型定义上。
错误原因拆解
你看这段代码:
double max; max = indexOfLargestElement(sorted , sorted.length - i); hold = sorted[max];
Java里数组的索引必须是int类型,但你这里的max是double类型,而且indexOfLargestElement方法的返回类型也是double——可实际上你在这个方法里返回的是代表数组索引的整数index啊!当你把一个整数用double类型返回,再赋值给double max,然后用它去访问数组元素时,Java就会报错:因为把double转成int可能会丢失精度(虽然这里实际是整数,但编译器不知道),所以不允许隐式转换。
另外,indexOfLargestElement的size参数定义成double也完全没必要——数组的长度、循环的边界都是整数,用double类型只会增加不必要的类型转换风险。
修复后的代码
把这两个地方的类型修正为int就解决问题了,以下是修正后的完整代码:
/** * @return a sorted (in descending order) temperatures array */ public double [] sortedTemps() { double sorted [] = new double[temp.length]; // 复制原数组到新数组 for (int i = 0; i < temp.length ; i++) sorted[i] = temp[i]; double hold; // 把max改成int类型,因为数组索引是整数 int max; for (int i = 0 ; i < sorted.length - 1; i++) { max = indexOfLargestElement(sorted , sorted.length - i); hold = sorted[max]; sorted[max] = sorted[sorted.length - i - 1]; sorted[sorted.length - i - 1] = hold; } return sorted; } // 方法返回类型改为int,size参数也改为int private int indexOfLargestElement ( double[] array, int size) { int index = 0; for ( int i = 1; i < size; i++ ) { if ( array[i] > array[index] ) index = i; } return index; }
额外的小建议
- 写方法的时候要明确返回值的含义:找索引就返回
int,找数值才返回double,这样逻辑更清晰,也不会踩类型转换的坑。 - 可以给你的JavaDoc注释补全一下,比如说明参数的含义,这样以后自己看代码也更方便~
内容的提问来源于stack exchange,提问作者Java121
相关产品推荐
相关产品推荐

