0

Я решаю проблему, когда мне присваивается 2D-массив. Проблема в том, что один из двух массивов не может существовать в данном двумерном массиве.Отсутствует проверка массива в 2D-массиве - Java

Я понял, что могу выполнить простую проверку длины или нулевую проверку, но ни одна из них не работает. Я получаю исключение arrayIndexOutOfBounds в любом случае.

String smartAssigning(String[][] information) { 
int[] employee1 = new int[3]; 
int[] employee2 = new int[3]; 
String name1 = ""; 
String name2 = ""; 

if(information[1].length <= 0 || information[1] == null) 
{ return information[0][0];} 

Caused by: java.lang.ArrayIndexOutOfBoundsException: 1 
at _runefvga.smartAssigning(file.java on line 7) 
... 6 more 

Первый массив с индексом 0 существует, но второй массив в индексе 1 не существует. Есть ли другой способ проверить это?

+3

Вы должны создать класс «Сотрудник». Не используйте так много параллельных массивов/переменных. – 4castle

+1

Ваша проверка '[1]' но возвращающая '[0]'? – brso05

+2

'(информация [1] .length <= 0 || информация [1] == null)'? Итак, это: сначала разыщите возможный нулевой указатель, а затем проверьте, был ли он «null»? – fabian

ответ

1

information.length вернет количество массивов, которые содержатся. information[n].length вернет длину массива по индексу n. Когда вы проверяете if(information[1].length <= 0 ..., вы проверяете, есть ли второй массив и какая длина этого массива. Если нет второго массива, вы получите за борт.

Try:

for(String[] array : information) { 
    //do something... 
} 
0

Вы должны принять во внимание порядок, в котором проверяются эти условия.

Вы писали:

if(information[1].length <= 0 || information[1] == null) 

Так первый information[1].length <= 0 проверяется и только если это ложь, чем information[1] == null проверяется.

Второе условие не имеет смысла, если information[1] == null, поскольку при оценке information[1].length уже выбрано Исключение.

Так что вам нужно, чтобы переключить порядок:

if(information[1] == null || information[1].length <= 0) 

Второй массив не существует, поэтому information[1] == null верно

+0

'information [1] == null' все еще может вызывать исключение IndexOutOfBoundsException, вам нужно сначала проверить массив' information! = Null' и 'information.length'. –

0

2-мерный массив в Java на самом деле просто массив массивов. Таким образом, вам нужно проверить как длину «внешнего» массива (массив массивов), так и «внутренние» массивы (массивы int в вашем случае). К сожалению, из вашего кода неясно, что вы хотите сделать, поэтому в зависимости от вашей цели и того, что вы знаете о своих абонентах (например, информация может быть нулевой), вы можете проверить некоторые или все из следующих параметров:

information!=null 
information.length 
information[x]!=null 
information[x].length 
+0

Объект 'информация' имеет тип' String [] [] ' –

+0

@SusannahPotts О да спасибо!Я исправил это. –

+0

Добро пожаловать! –

Смежные вопросы