Почему я получаю ошибку исключения при попытке вывода массива?

#java #arrays #exception #multidimensional-array #error-handling

#java #массивы #исключение #многомерный массив #обработка ошибок

Вопрос:

Я написал простой код, который должен выводить 2D-массив. Это код:

 String month[];
int speedfines[][];

public int speedFines() {
    speedfines = new int[3][2];
    month = new String[2];

    month[0] = "JAN";
    month[1] = "FEB";
    month[2] = " MAR";

    speedfines[0][0] = 128;
    speedfines[0][1] = 135;
    speedfines[0][2] = 139;
    speedfines[1][0] = 155;
    speedfines[1][1] = 129;
    speedfines[1][2] = 175;
    speedfines[2][0] = 129;
    speedfines[2][1] = 130;
    speedfines[2][2] = 185;
    speedfines[3][0] = 195;
    speedfines[3][1] = 155;
    speedfines[3][2] = 221;

    System.out.println(Arrays.toString(speedfines));

    return 0;
}
  

Когда я запускаю этот код, он выдает мне исключение java в ошибке потока.
Я использую netbeans 12.0, и у меня нет никаких ошибок в моем коде, но при запуске я получаю ошибку ошибки исключения
Может кто-нибудь объяснить мне, что означает исключение Java и как это исправить, если это возможно.

Комментарии:

1. Вам нужно провести много тестов, прежде чем отправлять вопросы такого рода. Вывод исключения очень понятен, что у вас есть исключение ArrayOutOfBoundException, которое означает, что у вас ошибка с длиной массивов.

Ответ №1:

Проблема в размерах, которые вы определили для массивов month и speedfines .

Например, вы определили размер от 2 до месяца и попытались поместить в него 3 элемента. Чтобы ваш код работал правильно, измените определения массивов на:

 speedfines = new int [4][3];
month = new String [3];
  
  -------------------
|      |      |     |     ⇒    Size = 3  /  month = new String [3]
 -------------------
   ↑       ↑     ↑
   0       1     2

  

Ответ №2:

Ваш month массив должен быть:

 month = new String[3];
  

Когда вы устанавливаете это значение new String[2] , вы разрешаете 2 элементам находиться в массиве.

Поскольку вы задаете 3 элементы в массиве:

 month[0] = "JAN";
month[1] = "FEB";
month[2] = "MAR";
  

Это вызывает ArrayIndexOutOfBoundsException , потому что на данный момент index 2 не существует.

Кроме того, ваши массивы определены вне функции. Переместите их внутрь функции.

Код должен быть:

 public int speedFines() {
    int speedfines[][] = new int[3][2];
    String month[] = new String[3];

    month[0] = "JAN";
    month[1] = "FEB";
    month[2] = "MAR";

    speedfines[0][0] = 128;
    speedfines[0][1] = 135;
    speedfines[0][2] = 139;
    speedfines[1][0] = 155;
    speedfines[1][1] = 129;
    speedfines[1][2] = 175;
    speedfines[2][0] = 129;
    speedfines[2][1] = 130;
    speedfines[2][2] = 185;
    speedfines[3][0] = 195;
    speedfines[3][1] = 155;
    speedfines[3][2] = 221;

    System.out.println(Arrays.toString(speedfines));

    return 0;
}
  

Комментарии:

1. Я изменил код и сделал month = new String [3]; , но ошибка все еще появляется

2. Спасибо, вы измените мои значения массива

Ответ №3:

вы сохраняете 12 элементов в массиве 2dimention, поэтому вам нужно сделать это speedfines = new int [4][3]; Я думаю, что имя исключения — ArrayIndexOutOfBounds, которое отображается, когда вы указываете размер массива и присваиваете ему элементы, превышающие ее размер