2013-10-08 6 views
-5

Я продолжаю получать код ошибки: java.lang.ArrayIndexOutOfBoundsException: 5 или со случайными числами вместо 5. Я пытаюсь написать сценарий, который берет список тестовых оценок с входа пользователя, а затем вычисляет самый высокий балл, который они ввели , Как это исправить?Я продолжаю получать java.lang.ArrayIndexOutOfBoundsException: 5! Как это исправить?

Примечание: «баллы» мой список массива имя и «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]. 

    } 
} 
+2

Что размер 'scores' ? –

+1

Остановить попытку доступа к элементу массива '5'. – asteri

+0

Ваше название очень обманчиво ... Я бы посоветовал просить что-то вроде «Как перебрать массив в javascript» – DigitalJedi805

ответ

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 
} 
Смежные вопросы