Я пишу простой класс для моделирования системы бронирования самолетов. К сожалению, у меня всегда есть личность, которая прерывается множеством исключений нулевого указателя, и я не могу найти их нигде. Вот моя законченная работа: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)
'» ... Страшный ошибка NullPointException показывает вверх, и я не уверен, что вызывает этот зверь. "' - Исключение stackTrace скажет вам! Где ваш стек, и какая строка говорит, что вы бросаете NPE? Не игнорируйте сообщения об исключениях - изучите их! –
Исключение в потоке "основного" java.lang.NullPointerException \t на airplane.seatsReserveFirstClass (airplane.java:63) \t в test.main (test.java:58) – Silbern
Так что линия airplane.java 63? Опять же, эти сообщения сообщают вам достаточно информации для поиска решения, хотя, вероятно, ваш ответ ниже в ответе Эрнана. Ключ, хотя и не должен игнорировать сообщения об исключении stacktrace, поскольку они являются ключевыми. Также, пожалуйста, научитесь использовать соглашения об именах Java, если хотите помочь другим понять ваш код. –