2016-04-11 3 views
-1

Когда я пытаюсь передать rowNum = 2 и colNum = 2 в массив 2d, я получаю исключение, когда он должен возвращать false, может ли кто-нибудь помочь мне с этим?ArrayIndexOutOfBoundsException в 2d массиве

public boolean addPassenger(String passName, int rowNum, int colNum) { 
    boolean check = false; 
    System.out.println("row num: " + rowNum + " column num: " + colNum); 
    System.out.println("row length: " + p.length + " column length: " + p[0].length); 

    if (rowNum <= p.length && colNum <= p[0].length && rowNum >= 0 && colNum >= 0 && p[rowNum][colNum].getName().equals("")) { 

     p[rowNum][colNum] = new Passenger(passName, f); 
     check = true; 

    } else if (rowNum >= p.length || colNum >= p[0].length || !p[rowNum][colNum].getName().equals("")) { 

     check = false; 
    } else { 
     check = false; 
    } 

    return check; 
} 

Вот некоторый вывод

   run: 
     Welcome to blank Airlines 
     Enter a flight number: 
     R62 
     Enter the number of rows: 
     2 
     Enter the number of seats per row: 
     2 
     Enter add, remove, seats, list, or quit: 
     add 
     Enter passenger name, row, and seat: 
     me 0 0 
     row num: 0 column num: 0 
     row length: 2 column length: 2 
     Passenger me was added. 
     Enter add, remove, seats, list, or quit: 
     seats 
     |   0||   1| 
     0|  me||   | 
     1|   ||   | 
     Enter add, remove, seats, list, or quit: 
     add 
     Enter passenger name, row, and seat: 
     you 2 2 
     row num: 2 column num: 2 
     row length: 2 column length: 2 
     Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 
       at csc212hw06.Plane.addPassenger(Plane.java:34) 
       at csc212hw06.Main.main(Main.java:61) 
     Java Result: 1 

Вот исключение

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 
at csc212hw06.Plane.addPassenger(Plane.java:34) 
at csc212hw06.Main.main(Main.java:61) 
Java Result: 1 

Если у кого есть какие-то предложения, было бы весьма признателен!

+1

Используйте отладчик, который вы в основном просите нас сделать для вас. – redFIVE

+1

Вы проверяете 'rowNum <= p.length' и получаете доступ к' p [rowNum] '- что может быть проблемой? (Аналогично для 'colNum') –

ответ

0
if (rowNum <= p.length && colNum <= p[0].length && rowNum >= 0 && colNum >= 0 && p[rowNum][colNum].getName().equals("")) { 

Должно быть rowNum < p.length && colNum < p[0].length, не rowNum <= p.length && colNum <= p[0].length. В массиве размером n действительными индексами являются [0,n-1], что означает, что индексирование n даст ошибки за пределами границ.

+0

удивительный, который сработал спасибо – Demuze28

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