-5

エラー コード java.lang.ArrayIndexOutOfBoundsException: 5 または 5 ではなく乱数が表示され続けます。ユーザーの入力からテスト スコアのリストを取得し、入力した最高スコアを計算するスクリプトを作成しようとしています。これを修正するにはどうすればよいですか?

注:「scores」は配列リストの名前で、「testNum」はテスト スコアの量です。

System.out.print ("Enter a set of test scores, hitting enter after each one: ");
//---------------------------------------------------------------------------------------
//   loop that will set values to the scores array until the user's set amount is reached.
//---------------------------------------------------------------------------------------
for(int x = 0; x < testNum; x += 1) //x will approach testNum until it is less than it, then stop.
{
    scores[x] = scan.nextInt();

} //working



    for(int z = 0, a = 1; z < testNum; z += 1) // attempts to find the highest number entered.
{
    if (scores[z] > scores[z + a])
    {
        a += 1;
        z -= 1; //offsets the loop's += 1 to keep the same value of z
    }
    else
    {
        if (z + a >= testNum)
        {
            System.out.println ("The highest number  was " + scores[z]);
        }
        a = 0; //resets a to try another value of scores[z].

    }
}
4

1 に答える 1

0

あなたが示したものに基づいて:

testNumより大きいですscores.length。これは、反復子 ( i) をtestNum実際の長さではなく比較して配列をトラバースすると、存在しないインデックスにヒットすることを意味します。

たとえば、 とtestNum = 8としましょうscores.length = 5。次に、コードではArrayIndexOutOfBoundsException:5、ループがインデックス 0、1、2、3、および 4 を通過するため (配列はインデックス 0 から始まることに注意してください)、範囲外の 5 にアクセスしようとするため、 を取得します (例外が示すように) )。

ユースケースに応じて、次の手法のいずれかを使用して、配列を適切にトラバースできます。

for(int i = 0; i < scores.length; i++) {
    //do stuff
}

... また ...

for(int score : scores) {
    //do stuff
}
于 2013-10-08T17:22:29.570 に答える