IndexOutOfBoundsException - PullRequest
       2

IndexOutOfBoundsException

0 голосов
/ 02 июня 2011

Довольно тривиальный фрагмент кода Java здесь .. Но я получил исключение OutOfBoundsException, и я не совсем уверен, почему?Любая помощь была бы великолепна!

Прежде чем кто-либо спросит, если это домашняя работа, нет, это не для подготовки к экзамену.

import java.util.Scanner;
public class exampractice {

    public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);

        int[] a = {1,2,3};
        int min = a[0];
        int max = a[0];

        for (int i = 0; i <= a.length; i++){
            if(a[i] < min)
                min = a[i];
            else
                if(a[i] > max)
                    max = a[i];
        }

        System.out.println("Min is"+min+ "\nMax is: " + max);
    }
}

Ответы [ 6 ]

1 голос
/ 02 июня 2011

Массивы используют счет на основе 0, и в цикле for вы идете i <= a.length, что означает, что вы будете получать доступ к элементу, который не существует. просто удалите = и ваше добро. </p>

for (int i = 0; i < a.length; i++)
1 голос
/ 02 июня 2011

Это должно быть <, а не <=. Индексы на основе нуля для массива варьируются от 0 до length - 1.

Обновление

Кто-то в аспирантуре научил меня создавать подобные ментальные паттерны и использовать их; вы будете избегать ошибок Это то, что любой массив в C-подобном языке всегда ищется как

for(index = 0; index < array.length ; index++)

Обучившись этому на протяжении многих лет, я увидел эту ошибку буквально с первого взгляда, именно так я и оказался во главе линии.

Вот еще несколько примеров для C:

 char aString[MAXLENTH];  // declare a string array
 char * aString ;
 aString = (char *) malloc(MAXLENGTH]; // or malloc it

 // constructing a string with catenation
 aString[0] = '\0';       // now either way this is guaranteed an empty string

Но, конечно, я должен был использовать другой шаблон:

 if((aString = (char *) malloc(MAXLENGTH) == NULL){
     // report out of memory
     exit(BAD);
 }

Подумайте, какие еще шаблоны могут быть хорошими.

0 голосов
/ 02 июня 2011

Ваш цикл for должен быть < a.length, а не <= a.length:

for (int i = 0; i < a.length; i++) {
0 голосов
/ 02 июня 2011

i должен быть между 0 и a.length - 1, так как первый элемент массива начинается с ключа 0. Таким образом, условие for должно быть строго меньше, чем вместо или равно a.length.

0 голосов
/ 02 июня 2011

Хотя a является массивом, а массивы индексируются с нуля, вы должны зациклить его от 0 до a.length -1.Достаточно изменить i <= a.length на i < a.length.

for (int i = 0; i < a.length; i++)
0 голосов
/ 02 июня 2011
for (int i = 0; i <= a.length; i++)

должно быть

for (int i = 0; i < a.length; i++)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...