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;

length は配列のサイズを返し、最初の要素を 1 としてカウントしますが、配列から要素を取得する場合、最初の要素には 0 のラベルが付けられます。length - 1 (ループが停止する i = length の場合のように、そのループで可能な最大値) を使用してから 1 を追加すると、存在しない配列 [長さ] を参照しようとします。ゼロから始まるので、最後の要素は array[length-1] です

于 2013-07-02T18:28:09.893 に答える