web-dev-qa-db-ja.com

配列インデックスの範囲外例外(Java)

ここに私のコードがあります:

public class countChar {

    public static void main(String[] args) {
        int i;
        String userInput = new String();

        userInput = Input.getString("Please enter a sentence");

        int[] total = totalChars(userInput.toLowerCase());

        for (i = 0; i < total.length; i++);
        {
            if (total[i] != 0) {
                System.out.println("Letter" + (char) ('a' + i) + " count =" + total[i]);
            }
        }
    }

    public static int[] totalChars(String userInput) {
        int[] total = new int[26];
        int i;
        for (i = 0; i < userInput.length(); i++) {
            if (Character.isLetter(userInput.charAt(i))) {
                total[userInput.charAt(i) - 'a']++;
            }
        }
        return total;
    }
}

プログラムの目的は、ユーザーに文字列を要求し、文字列で各文字が使用された回数をカウントすることです。

プログラムをコンパイルすると、問題なく動作します。プログラムを実行すると、ポップアップボックスに文字列を入力できますが、文字列を送信して[OK]を押すと、エラーが発生します。

Exception in thread "main" Java.lang.ArrayIndexOutOfBoundsException: 26
at countChar.main(countChar.Java:14)

問題が何であるか、またはそれを修正する方法が完全にはわかりません。

6
Boxasauras
for ( i = 0; i < total.length; i++ );
                                    ^-- remove the semi-colon here

このセミコロンを使用すると、ループはi == total.lengthまでループし、何も実行せず、ループの本体と思われるものが実行されます。

17
JB Nizet
for ( i = 0; i < total.length; i++ ); // remove this
{
    if (total[i]!=0)
        System.out.println( "Letter" + (char)( 'a' + i) + " count =" + total[i]);
}

Forループは、i=26(26はtotal.length)までループし、その後ifが実行され、配列の境界を超えます。 forループの最後にある;を削除します。

これはJavaの配列の長さのマイナスの非常に良い例です、私はここに両方の​​例を与えています

 public static int linearSearchArray(){

   int[] arrayOFInt = {1,7,5,55,89,1,214,78,2,0,8,2,3,4,7};
   int key = 7;
   int i = 0;
   int count = 0;
   for ( i = 0; i< arrayOFInt.length; i++){
        if ( arrayOFInt[i]  == key ){
         System.out.println("Key Found in arrayOFInt = " + arrayOFInt[i] );
         count ++;
        }
   }

   System.out.println("this Element found the ("+ count +") number of Times");
return i;  
}

上記のi <arrayOFInt.length;配列の長さでマイナス1にする必要はありません。ただし、i <= arrayOFInt.length -1;そうでない場合、arrayOutOfIndexExceptionが発生します。これが役立つことを願っています。

2
Ayaz Akbar

これを削除する必要があります

for (i = 0; i < total.length; i++);
0
El Viruz Exe