0

下面是一个搜索连续字符的简单程序。但是我得到一个例外,因为我在数组索引之外进行搜索。我明白它为什么会发生,但不确定我该如何处理?

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);
    }
4

2 回答 2

9

调整你的循环条件:

for(int i = 0; i < queryChar.length - 1; i++) {
            for(int j = 0; j < termChar.length - 1; j++)

注意添加的-1

如果您总是查看循环中的一项,则无法循环到最后一项,因为它没有一项。

于 2013-07-02T18:25:34.213 回答
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,但是当从数组中获取元素时,第一个元素标记为 0。使用 length - 1 (该循环中的最高可能值,当 i = length 循环停止时),然后添加 1,尝试引用不存在的数组 [长度]。因为它从零开始,所以最后一个元素是 array[length-1]

于 2013-07-02T18:28:09.893 回答