#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, которое отображается, когда вы указываете размер массива и присваиваете ему элементы, превышающие ее размер