我了解这段代码的一般目的是在数组中查找子数组的起始索引
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数组的元素是否相同。