1. ホーム

Java配列のout of boundsエラーです。スレッド "main" で例外発生 java.lang.ArrayIndexOutOfBoundsException: 15

2022-02-14 23:50:09

今日、Javaの学習中に、配列を与えて、その配列に含まれる数値の数を求める問題に遭遇しました。この問題に出会って最初に考えたのは、ArraysクラスのtoString()メソッドを使って配列をStringに変換し、添え字を処理して数字の個数を求めることでした。 Stringクラスのオブジェクトは、添え字を直接扱わないんだ。

そして、配列は各位置で0に初期化されるので、toCharArray()メソッドでStringクラスオブジェクトを文字の配列に変換し、その文字の配列を繰り返し処理して結果を得ています。

public static void main(String[] args){
        int[] scores = {1, 2, 3, 4, 5};
        String l = Arrays.toString(scores);
        //char list[] = new char[100];
        char[] list = l.toCharArray();
        int number = 0;
        for(int i = 0; list[i] ! = 0; i++)
        {
        	if(list[i] == ' ')
        	{
        		number++;
        	}
        }
        System.out.println(number);
    }
Hint: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 15
	at kick.HelloWorld.main(HelloWorld.java:12)

Hint: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 15
	at kick.HelloWorld.main(HelloWorld.java:12)

これは、配列リストの添え字が走査中に 15 (実際には 16) になったことを示す境界外エラーメッセージで、初期化時に要求されたのは 15 の位置だけだったことを示しています。

後のヒントに関連して、forループの終了判定が間違っていたことがわかり、この文字配列のメモリ要求範囲は正確なので、後ろに余分なスペースはなく、0に初期化された配列の位置はもうないのです。