我需要返回大海捞针位置的索引位置
数组针阵列发生,否则为-1。例如,如果String haystackArray = [red, blue, green]
和String needleArray = [blue, green]
,它应该为针发生的haystack的1索引位置返回1。
以下是我的代码:
public static int FindSequence(String[] haystack, String[] needle)
{
int numInSequence = 0;
int counter = 0;
if(haystack.length == 0 || needle.length == 0)
return -1;
if(needle.length > haystack.length)
return -1;
for(int i = 0; i < haystack.length-1; i++) //for the length of haystack
{
if(needle[0].equals(haystack[i]))//if the first item in needle is equivalent to this particular item in haystack...
{
numInSequence = i;
numInSequence+=1;
for(int j = 1; j < needle.length-1; j++, numInSequence++){ //for the remaining length of the needle...
if(needle[j].equals(haystack[numInSequence])){ //checks to see if the next item in needle is equivalent to the next item in haystack and if this
counter++;
if((needle[needle.length-1]).equals(haystack[numInSequence])){ // if the last item in needle is equivalent to an item in haystack...
return numInSequence - counter - 1; // return our desired index
}
}
break;
}
break;
}
}
return -10;
}
出于某种原因,我尝试了几乎所有的数组测试,我得到-10返回。任何建议或帮助将不胜感激。
答案 0 :(得分:0)
将循环条件更改为
for(int i = 0; i < haystack.length; i++)
和
for(int j = 1; j < needle.length; j++, numInSequence++){
使用您当前的当前代码,您正在跳过最后一个索引。
此外,如果j < needle.length -1,它怎么能进入你的
if((needle[needle.length-1]).equals(haystack[numInSequence])){
并返回return numInSequence - counter - 1;
。这就是bug的来源。
举一个例子,如果数组中有10个元素,则索引为0-9。而你正在检查&lt;而不是&lt; 9 10.因此,您的代码不会检查索引9。