将Arrays.copyofrange传递给方法

时间:2018-04-13 17:53:35

标签: java arrays recursion search

当给定数组(按升序排列)或整数时,我想以有效的方式在数组中找到整数。我检查数组的中间数字是否等于要检查的数字。如果是的话,太好了!如果没有,那么我检查数字是否大于或小于中间数字。我将阵列切成两半并再次检查。但是,我一直得到零值。

public static int findNumber(int[] array, int number){
        int position = 0;
        int half = array.length/2;
        //System.out.println(array[half]);
        if (array[half]==number){
            position=array.length/2;
        }
        else if (array[half]<number){
            findNumber(Arrays.copyOfRange(array, half, array.length),number);
        }
        else if (array[half]>number){
            findNumber(Arrays.copyOfRange(array,0,array.length/2),number);
        }
        return position;
    }

唯一的例外是,如果检查的数字是数组的确切中间数。我认为错误与我无法理解Arrays.copyOfRange(original,to:,from :)的工作原理。

2 个答案:

答案 0 :(得分:0)

根据java.util文档Arrays.copyOfRange:

  

将指定数组的指定范围复制到新数组

在每次递归调用中,您将获得一个新数组,其中搜索项的位置将与原始数组不同。

答案 1 :(得分:0)

您需要添加一个值,以跟踪传递回方法的范围左侧有多少索引。

public static int findNumber(int[] array, int number){
     return(helper(array, number, 0);
}

public static int helper(int[] array, int number, int leftOf){
    int half = array.length/2;
    //System.out.println(array[half]);
    if (array[half]==number){
        return(half+leftOf);
    }
    else if (array[half]<number){
        return(
      helper(Arrays.copyOfRange(array, half, array.length),number,leftOf+half));
    }
    else if (array[half]>number){
        return(
      helper(Arrays.copyOfRange(array,0,array.length/2),number,leftOf));
    }
}