我理解这段代码的一般用途是找到数组中子数组的起始索引
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个数组小于第二个数组的长度,我的问题是为什么呢?如果我错了,还有更多解释。谢谢。
答案 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数组的元素是否相同。