理解多个for循环之间的相互关系

时间:2017-11-21 22:23:54

标签: java arrays for-loop

我理解这段代码的一般用途是找到数组中子数组的起始索引

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个数组小于第二个数组的长度,我的问题是为什么呢?如果我错了,还有更多解释。谢谢。

1 个答案:

答案 0 :(得分:2)

  • 第一个条件(TypeError: Object of type 'int64' is not JSON serializable)是检查主数组的溢出

    例如。 i + j > array.length - 1

    考虑这种情况,您的代码会在找到master array = [1,2,3,4,5] and subArray = [4,5,6,7]时输入逻辑array[i] == subArray[0]4现在,您将遍历subArray以检查每个元素。 [i=3 and j=0],当您到达[i=3 and j=1] to check 5时,您能猜出会发生什么吗?如果你认为它需要停止,那你就是对的。此时6。所以条件i=3 and j=2 ==&gt; i + j > array.length - 1将启动并退出循环。希望有所帮助。

  • 第二个条件是检查subArray和master数组的元素是否相同。