【问题标题】:lossy conversion when dividing (long to int) [duplicate]除法时的有损转换(长到整数)[重复]
【发布时间】:2018-03-07 07:30:00
【问题描述】:

我正在尝试在数组(长类型)中找到中间索引 我解决的问题专门要求很长时间才能返回,所以我无法更改签名 我想在我的快速排序代码中找到枢轴点,但我收到一个错误“可能有损从 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;
}

【问题讨论】:

  • 一个数组的索引类型为int
  • 尝试数组[(left + right) / 2L];
  • @lakshman 没有区别,2 将经历二进制数字提升到 long 已经。

标签: java arrays quicksort


【解决方案1】:

来自JLS Sec 10.4

数组必须由 int 值索引

long 用于leftright 参数(以及ij)是没有意义的(因为数组不能有那么多元素),并且会导致编译时错误。将它们更改为int

【讨论】:

  • 感谢您的帮助
【解决方案2】:

使用“array[index]”,这个“index”必须是int。所以

long pivot = array[(int)((left + right) / 2)];

【讨论】:

    【解决方案3】:

    我尝试将 long 类型转换为 int 之类的.. long pivot = array[(int) ((left + right) / 2)]; 它对我有用,您能否详细说明在哪种情况下您会收到错误“可能有损从 long 到 int 的转换”。

    猜你喜欢
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    • 2014-08-02
    • 2014-03-16
    • 2020-01-06
    • 2021-09-22
    • 1970-01-01
    相关资源
    最近更新 更多