我在if java.lang.NullPointerException
的开头得到if (name.equalsIgnoreCase(passengers[i].getName()))
@。这是我输入错误名称的时候。共有500名乘客。为什么? (这只是我代码的一小部分)
System.out.println("Booking Cancellation:");
System.out.println("--------------------");
name = null;
System.out.print("\nName of Passenger: ");
name = scan.nextLine();
for (int i = 0; i < 500; i++)
{
if (name.equalsIgnoreCase(passengers[i].getName()))
{
passengers[i].setName(null);
passengers[i].setAddress(null);
passengers[i].setEmail(null);
passengers[i].setOnFlight(0);
passengers[i].setFlightBooked(false);
flights[i].decreaseBookedSeats();
bookedSeatsOverall = bookedSeatsOverall - 1;
System.out.println("\nPassenger's details have been wiped from the system.");
System.out.println("The booking has been cancelled.\n");
break;
}else if (i == 499)
{
System.out.println("\nNo bookings have been made under this name.\n");
break;
}
}
答案 0 :(得分:0)
什么是passengers
?它是一个长度为500的数组吗?
数组中是否有空传递符?
也许for循环可以成为
for (int i = 0; i < passengers.length; i++) {
if (passengers[i] != null && passengers[i].getName() != null) {
...
答案 1 :(得分:0)
添加这个警卫:
if (name != null &&
passengers[i] != null &&
name.equalsIgnoreCase(passengers[i].getName()))
{
//...code here
if (flights[i] != null){
flights[i].decreaseBookedSeats();
} else {
// should not happen
}
// .. more code
}
您必须确保name
不为空。由于nextLine
可能返回null,因此必须进行检查。 passengers[i]
和flights[i]
检查不是必需的,但如果代码中的任何位置可能会将数组中的 cell 中的一个设置为null
,那么您必须始终检查它们是否为空。
您还可以检查flights != null
和passengers != null
。但老实说,您应该能够通过将值打印到控制台或使用调试器来轻松找到。 NullReference异常通常很容易找到并修复。