除法时有损转换(long 到 int)
lossy conversion when dividing (long to int)
我试图在一个数组(long 类型)中找到中间索引
我解决的问题特别要求长到 return,所以我不能更改签名
我想在我的快速排序代码中找到枢轴点,但出现错误 "possible lossy conversion from long to int"
我知道我在划分时可能会丢失一些信息,但我想绕过它
这是包含错误的代码:
public static long partition(long[] array, long left, long right){
long i = left, j = right;
long tmp;
long pivot = array[(left + right) / 2]; // <-----ERROR HERE <------
while(i <= j) {
while(array[i] < pivot){
i--;
}
while(array[j] > pivot) {
j--;
}
if(i <= j) {
tmp =array[i];
array[i] = array[j];
array[j] = tmp;
i++;
j--;
}
}
return i;
}
来自JLS Sec 10.4:
Arrays must be indexed by int values
对 left
和 right
参数(以及 i
和 j
)使用 long
是没有意义的(因为数组不能许多元素),并会导致 compile-time 错误。将它们更改为 int
.
使用"array[index]",这个"index"必须是int。所以
long pivot = array[(int)((left + right) / 2)];
我尝试将 long 类型转换为 int 之类的..
long pivot = array[(int) ((left + right) / 2)];
它对我有用,你能详细说明你在哪种情况下会收到错误 "possible lossy conversion from long to int".
我试图在一个数组(long 类型)中找到中间索引 我解决的问题特别要求长到 return,所以我不能更改签名 我想在我的快速排序代码中找到枢轴点,但出现错误 "possible lossy conversion from long to int" 我知道我在划分时可能会丢失一些信息,但我想绕过它 这是包含错误的代码:
public static long partition(long[] array, long left, long right){
long i = left, j = right;
long tmp;
long pivot = array[(left + right) / 2]; // <-----ERROR HERE <------
while(i <= j) {
while(array[i] < pivot){
i--;
}
while(array[j] > pivot) {
j--;
}
if(i <= j) {
tmp =array[i];
array[i] = array[j];
array[j] = tmp;
i++;
j--;
}
}
return i;
}
来自JLS Sec 10.4:
Arrays must be indexed by int values
对 left
和 right
参数(以及 i
和 j
)使用 long
是没有意义的(因为数组不能许多元素),并会导致 compile-time 错误。将它们更改为 int
.
使用"array[index]",这个"index"必须是int。所以
long pivot = array[(int)((left + right) / 2)];
我尝试将 long 类型转换为 int 之类的.. long pivot = array[(int) ((left + right) / 2)]; 它对我有用,你能详细说明你在哪种情况下会收到错误 "possible lossy conversion from long to int".