划分时的有损转换(long to int)

时间:2018-03-07 07:30:00

标签: java arrays quicksort

我试图在数组中找到中间索引(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;
}

3 个答案:

答案 0 :(得分:3)

来自JLS Sec 10.4

  

数组必须用int值

编制索引

longleft参数(以及righti)使用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;。