我想知道为什么我得到一个java.lang.NullPointerException

时间:2014-03-02 21:16:24

标签: java if-statement for-loop

我在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;
    }

}

2 个答案:

答案 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 != nullpassengers != null。但老实说,您应该能够通过将值打印到控制台或使用调试器来轻松找到。 NullReference异常通常很容易找到并修复。