下面是一个搜索连续字符的简单程序。但是我得到一个例外,因为我在数组索引之外搜索。我明白为什么会这样,但我不确定如何管理它?
public static void main(String [] args)
{
String term = "Popeye's fishCat";
String query = "P's SalmonCat";
int score = 0;
char [] termChar = term.toCharArray();
char [] queryChar = query.toCharArray();
if((queryChar[0]) == (termChar[0]))
{
score++;
}
for(int i = 0; i < queryChar.length; i++)
{
for(int j = 0; j < termChar.length; j++)
{
if(queryChar[i] == termChar[j] )
{
if((queryChar[i + 1]) == (termChar[j + 1])) //Causes an exception
{
System.out.println((queryChar[i + 1]) + " " + (termChar[j + 1]));
score++;
break;
}
}
}
}
System.out.println(score);
}
答案 0 :(得分:9)
调整循环条件:
for(int i = 0; i < queryChar.length - 1; i++) {
for(int j = 0; j < termChar.length - 1; j++)
请注意添加的-1
如果您始终查看循环中的 next 项,则无法循环到最后一项,因为它没有 next 项。< / p>
答案 1 :(得分:0)
只需删除此位中的i + 1或j + 1
if((queryChar[i + 1]) == (termChar[j + 1])){
System.out.println((queryChar[i + 1]) + " " + (termChar[j + 1]));
score++;
break;
} 当legnth返回数组的大小时,将第一个元素计为1,但是当从数组中获取元素时,第一个元素标记为零。使用length - 1(该循环中的最高可能值,如i =循环停止的长度),然后加1,尝试引用不存在的array [length]。因为它从零开始,所以最后一个元素是array [length-1]