我试图在数组中找到中间索引(long类型) 我解决的问题特别要求长时间返回,所以我不能改变签名 我想在我的快速排序代码中找到支点,但是我得到一个错误"可能有损转换从long到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;
}
答案 0 :(得分:3)
来自JLS Sec 10.4:
数组必须用int值
编制索引
对long
和left
参数(以及right
和i
)使用j
是没有意义的(因为数组不能包含那么多元素) ),并将导致编译时错误。将它们更改为int
。
答案 1 :(得分:1)
使用&#34;数组[索引]&#34;,这个&#34;索引&#34;必须是int。所以
long pivot = array[(int)((left + right) / 2)];
答案 2 :(得分:-1)
我尝试将类型转换为类似于... long pivot = array [(int)((left + right)/ 2)]; 它适用于我,你能详细说明你在哪种情况下会得到错误&#34;可能有损转换从long到int&#34;。