Почему я получаю исключение ArrayIndexOutofBoundsException?

В моем коде JAVA мне даны данные, и мне нужно найти этот режим. Все успешно скомпилировано, и каждый метод работает. Однако, когда я пытаюсь получить доступ к режиму, я получаю java.lang.ArrayIndexOutOfBoundsException: 987 в моем окне терминала. Выделенная часть имеет следующий метод, который является одним из моих максимальных методов. Массив данных, кстати, является только int [] данными.

public int maxOfData(int [] oa)
{
 int max = oa[0];
 for (int i = 1; i < size; i++)
 {
 if (oa[i] > max)
 max = oa[i];
 }
 return max;
}

Исключение составляет строка if(oa[i] > max)

И код режима:

public int[] modeOfData()
{
 int[] tally = new int[maxOfData() + 1];

 for( int i = 0; i < size; i++)
 {
 tally[data[i]]++;
 } 

 //max contains frequency of modes
 int max = maxOfData (tally);

 int count = 0;

 for( int i = 0; i < tally.length; i++)
 {
 if( tally[i] == max )
 count++;
 }
 //count occurence of maxValue in tally (for)
 //that determines how many modes there are

 //declare another int called modes
 int[] modes = new int[count];
 //size of array should be count

 //loop through tally and extract modes: it the index value.

 int pos = 0;
 for( int i = 0; i < tally.length; i++)
 {
 if(tally[i] == count)
 modes[pos++] = i;
 }

 return modes;

 //modes are where the values are == max
}

Мой другой макс для data и тот же, но data вместо oa. По словам моего учителя, мне нужны оба метода max. Итак, что мне делать? Как это исправить?

4 ответа

Я думаю, что линия

for (int i = 1; i < size; i++)

должно быть

for (int i = 1; i < oa.length; i++)


Проблема в этой части кода

int max = oa[0];

for (int i = 1; i < size; i++)
{
 if (oa[i] > max)

 max = oa[i];
}

maxOfData(int [] oa) метод maxOfData(int [] oa) с надлежащими проверками, подобными этому

public int maxOfData(int[] oa) {
 if (oa == null) {
 throw new IllegalArgumentException("Input array is null");
 }
 int max=oa[0];
 for (int i = 1; i < oa.length; i++) {
 if (oa[i] > max)
 max = oa[i];
 }
 return max;
}

если входной массив равен null, он не должен обрабатываться.


ArrayIndexOutOfBound Исключение выбрано, чтобы указать, что к массиву был обращен незаконный индекс. Индекс является либо отрицательным, либо большим или равным размеру массива. Всякий раз, когда вы повторяете объект Array. вам нужно итерации при проверке индекса всегда меньше его длины

например,

for(int i=1;i
<p> Ваша переменная размера имеет значение недопустимого массива. что проблема</p>


Посмотрите номер, сохраненный в размере, а затем проверьте, какой размер вы объявили oa[]. Если размер больше размера oa[] тогда у вас есть проблема.

licensed under cc by-sa 3.0 with attribution.