ここに私のコードがあります:
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)
問題が何であるか、またはそれを修正する方法が完全にはわかりません。
for ( i = 0; i < total.length; i++ );
^-- remove the semi-colon here
このセミコロンを使用すると、ループはi == total.length
までループし、何も実行せず、ループの本体と思われるものが実行されます。
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が発生します。これが役立つことを願っています。
これを削除する必要があります
for (i = 0; i < total.length; i++);