除法时有损转换(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

leftright 参数(以及 ij)使用 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".