2013-11-22 3 views
1

Я пишу простой класс для моделирования системы бронирования самолетов. К сожалению, у меня всегда есть личность, которая прерывается множеством исключений нулевого указателя, и я не могу найти их нигде. Вот моя законченная работа:Unkown NullPointerException

import java.util.*; 
public class airplane 
{ 
    boolean[] seats; 
    Scanner scan = new Scanner(System.in); 
    public airplane(int num_of_seats) 
    { 
     boolean[] seats = new boolean[num_of_seats]; 
     for (int counter = 0; counter < num_of_seats; counter++) 
     { 
      seats[counter] = true; 
     } 
    } 
    public boolean seatFirstClass(int seat) 
    { 
     if (seat <= seats.length/4) 
      return true; 
     else 
      return false; 
    } 
    public void seatsReserveFirstClass() 
    { 
     for (int seat = 0; seat < seats.length; seat++) 
     { 
      if (seats[seat] == true && seat <= seats.length/4) 
      { 
       seats[seat] = false; 
       System.out.print("I have reserved one seat in first class. Please tell the passenger to enjoy their flight with these airlines! "); 
       break; 
      } 
     } 
     System.out.print("I could not find a seat in first class. Can the passenger switch to economy? (0 for no, 1 for yes) "); 
     int choice = scan.nextInt(); 
     if (choice == 0) 
      System.out.print("I could not add passenger due to lack of a seat."); 
     else if (choice == 1) 
     { 
      this.seatsReserveEconomy(); 
     } 
    } 
    public void seatsReserveEconomy() 
    { 
     for (int seat = 0; seat < seats.length; seat++) 
     { 
      if (seats[seat] == true && seat > seats.length/4) 
      { 
       seats[seat] = false; 
       System.out.print("I have reserved a seat in economy. Please tell the passenger to enjoy their flight with these airlines! "); 
       break; 
      } 
     } 
     System.out.print("I could not find a seat in economy. Can the passenger switch to first class? (0 for no, 1 for yes) "); 
     int choice = scan.nextInt(); 
     if (choice == 0) 
      System.out.print("I could not add the passenger due to a lack of seats."); 
     else if (choice == 1) 
      this.seatsReserveFirstClass(); 
    } 
    public void planeClear() 
    { 
     for (int seat = 0; seat < seats.length; seat++) 
     { 
      seats[seat] = true; 
     } 
    } 
    public void seatUnReserve(int seat) 
    { 
     if (seat < seats.length) 
     { 
      if (seats[seat] == false) 
      { 
       seats[seat] = true; 
       System.out.printf("Seat %d has been unreserved.\n", seat); 
      } 
      else 
      { 
       System.out.print("The seat you have entered is already unreserved.\n"); 
      } 
     } 
     else 
     { 
      System.out.printf("There is no seat number %d on this plane.\n", seat); 
     } 
    } 
} 

и здесь является основным классом, чтобы проверить:

public class Test 
{ 
    public static void main(String[] args) 
    { 
     Scanner scan = new Scanner(System.in); 
     boolean check = false; 
     System.out.print("How many seats does the plane have? "); 
     int num_of_seats = scan.nextInt(); 
     airplane Airplane = new airplane(num_of_seats); 
     while (check == false) 
     { 
      System.out.print("Please enter 0 to reserve a first class seat, 1 to reserve an economy seat,\n2 to cancel a reservation, 3 to clear the plane,\nand 4 to quit the program. "); 
      int choice = scan.nextInt(); 
      switch(choice) 
      { 
      case 0: 
       Airplane.seatsReserveFirstClass(); 
       break; 
      case 1: 
       Airplane.seatsReserveEconomy(); 
       break; 
      case 2: 
       System.out.print("Which seat should I unreserve? "); 
       int seat = scan.nextInt(); 
       Airplane.seatUnReserve(seat); 
       break; 
      case 3: 
       Airplane.planeClear(); 
       break; 
      case 4: 
       check = true; 
       break; 
      } 
     } 
    } 

} 

Если это выполняется, то Страшный ошибка NullPointException показывает вверх, и я не уверен, что вызывает это зверь.

Exception in thread "main" java.lang.NullPointerException 
at airplane.seatsReserveFirstClass(airplane.java:22) 
at Test.main(Test.java:15) 
+1

'» ... Страшный ошибка NullPointException показывает вверх, и я не уверен, что вызывает этот зверь. "' - Исключение stackTrace скажет вам! Где ваш стек, и какая строка говорит, что вы бросаете NPE? Не игнорируйте сообщения об исключениях - изучите их! –

+0

Исключение в потоке "основного" java.lang.NullPointerException \t на airplane.seatsReserveFirstClass (airplane.java:63) \t в test.main (test.java:58) – Silbern

+0

Так что линия airplane.java 63? Опять же, эти сообщения сообщают вам достаточно информации для поиска решения, хотя, вероятно, ваш ответ ниже в ответе Эрнана. Ключ, хотя и не должен игнорировать сообщения об исключении stacktrace, поскольку они являются ключевыми. Также, пожалуйста, научитесь использовать соглашения об именах Java, если хотите помочь другим понять ваш код. –

ответ

4

это является членом поля:

булевых [] места;

Scanner scan = new Scanner(System.in); 
public airplane(int num_of_seats) 
{ 

здесь теневые элемент поля с локальной переменной, не касаясь другой один

boolean[] seats = new boolean[num_of_seats]; 

    for (int counter = 0; counter < num_of_seats; counter++) 
    { 
     seats[counter] = true; 
    } 
} 

он должен выглядеть следующим образом: быстрый глаз нашел ответ

public airplane(int num_of_seats) 
{ 
    seats = new boolean[num_of_seats]; 
    for (int counter = 0; counter < num_of_seats; counter++) 
    { 
     seats[counter] = true; 
    } 
} 
+0

хороший глаз! 1+ голосование –

0

Германа для вас уже! В любом случае я продлеваю помощь на будущее ...

Вы можете использовать Java IDE, eclipse - хороший, для разработки программ. Я считаю, что одной из очень важных функций является отладка, которая позволяет вам полностью контролировать ваше приложение и отслеживать исключение быстро.

Вот краткое руководство, как отладить приложение из затмения (см 4.3 для исключения точек останова)

http://www.vogella.com/articles/EclipseDebugging/article.html

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