我了解这段代码的一般目的是在数组中查找子数组的起始索引

public static int findArray(int[] array, int[] subArray) {
    int index = -1;
    arrayLoop:
    for (int i = 0; i < array.length; i++) {
        if (array[i] == subArray[0]) {
            for (int j = 1; j < subArray.length; j++) {
                if (i + j > array.length - 1 || array[i + j] != subArray[j]) continue arrayLoop;
                //System.out.println( i+j );
            }
            index = i;
        }
    }
    return index;
}


我的问题是这条线

if (i+j>array.length-1 || array[i+j]!=subArray[j])


我认为第一个条件是以这种方式工作的:(i + j)表示相对于第二个数组长度向下通过第一个数组,并且加法检查它是否比第二个数组的长度小1个数组,我的问题是为什么所以?如果我错了,请提供更多解释。谢谢。

最佳答案

第一个条件(i + j > array.length - 1)是检查主数组的溢出

例如master array = [1,2,3,4,5] and subArray = [4,5,6,7]

考虑这种情况,您的代码在找到array[i] == subArray[0]时将输入逻辑4[i=3 and j=0]现在,您将遍历subArray来检查每个元素。 [i=3 and j=1] to check 5,当您到达6时,您能猜到会发生什么吗?如果您认为需要停止,那是对的。此时i=3 and j=2。因此,条件i + j > array.length - 1 ==> 5 > 4将开始,您退出循环。希望能有所帮助。
第二个条件是检查subArray和master数组的元素是否相同。

08-17 05:22