Ошибка массива java.lang.ArrayIndexOutOfBoundsException: length = 1;Индекс = 1 - PullRequest
0 голосов
/ 25 октября 2018

У меня есть массив в формате province;capital.

provArray = new String[] { "Alberta;Edmonton", "British Columbia;Victoria", "Manitoba;Winnipeg", "New Brunswick:Fredericton",
            "Newfoundland and Labrador;St.John's", "Nova Scotia;Halifax", "Ontario;Toronto", "Prince Edward Island;Charlottetown",
            "Quebec;Quebec City", "Saskatchewan;Regina", "Northwest Territories;Yellowknife", "Nunavut;Iqaluit", "Yukon;Whitehorse",
            "Alabama;Montgomery", "Alaska;Juneau", "Arizona;Phoenix", "Arkansas;Little Rock", "California;Sacramento", "Colorado;Denver",
            "Connecticut;Hartford"};

Затем у меня есть цикл for, который отделяет провинции от столицы (до и после ";").Тем не менее, по какой-то причине я получаю сообщение об ошибке: java.lang.ArrayIndexOutOfBoundsException: length=1; index=1.

for(int k = 0; k < bonusArray.length; k++){
    String[] split = bonusArray[k].split(";");
    String prov = split[0];
    String cap = split[1];

    if(prov.equals(answer)){
       bonusAnswer = cap;
    }
}

Как я могу исправить эту ошибку?

Редактировать: Исправлено, я случайно поставил : вместо ; для одного из моих элементов массива.

Ответы [ 5 ]

0 голосов
/ 26 октября 2018

Мы можем сделать это несколькими способами, но лучше всего использовать split.length-1 вместо того, чтобы указывать жестко закодированное значение в качестве индекса.Используя это, вы никогда не получите это исключение, даже если длина массива равна 1.

for(int k = 0; k < bonusArray.length; k++){
    String[] split = bonusArray[k].split(";");
    String prov = split[0];
    String cap = split[split.length-1];

    if(prov.equals(answer)){
       bonusAnswer = cap;
    }
}
0 голосов
/ 25 октября 2018

"Нью-Брансуик: Фредериктон" не содержит ";",Попробуйте встроить split () и часть [0], [1] в блок try-catch, чтобы исключить возникновение исключения OutOfBoundsException.

0 голосов
/ 25 октября 2018
 String[] split = bonusArray[k].split(";");

Вы просто предполагаете, что вы всегда получите split переменную с 2 элементами.В этом случае ваш вход имеет несколько элементов, которые не возвращают 2 элемента при разбиении, split() на самом деле не возвращает 2 элемента, поэтому ArrayIndexOutOfBoundsException.

Всегда проверяйте «длину массива» перед обращением к нему.элементы с указанным индексом.

РЕДАКТИРОВАТЬ: "New Brunswick: Fredericton" вызов split(";") для этой строки не вернет 2 элемента.

0 голосов
/ 25 октября 2018

В массиве есть значения, которые не имеют ; (точка с запятой), например New Brunswick:Fredericton

, поэтому этот код

String[] split = bonusArray[k].split(";"); дает массив длины =1

, и это вызывает исключение String cap = split[1];, поскольку вы можете получить доступ только к split[0] (запомните длину = 1).

Итак, вы должны убедиться, что каждый элемент в массиве имеет ; или вы проверяете длину переменной split перед обращением к их значениям.

0 голосов
/ 25 октября 2018

У вас есть опечатка в "Нью-Брансуик: Фредериктон", вам нужна точка с запятой против обычной двоеточия

...