błąd java.lang.NullPointerException

0

Witam, zaczynam dopiero moją przygodę z javą i chciałem napisać prosty program do rezerwacji miejsc w samolocie. Użytkownik może zapytać o miejsce i otrzyma odpowiedź czy miejsce jest wolne czy zajęte. Podczas kompilacji programu dostaję taki błąd:
Exception in thread "main" java.lang.NullPointerException
at Plane.add(first.java:59)
at first.main(first.java:70)
nie wiem co może być jego przyczyną
zamieszczam kod:


import java.nio.file.Paths;
import java.util.*;

class Passenger 
{
    private String name;
    private String sname;
    public Passenger()
    {
        name="none";
        sname="none";
    }
    public String takeData()
    {
        return name+" " + sname;
    }
    public int checkData()
    {   
        if(name.equals("none") || sname.equals("none"))
        {
            return 1;
        }
        return 0;
    }
    public void giveName(String n)
    {
        if(checkData()==1);
        {
            name = n;
        }
    }
    public void giveSname(String sn)
    {
        if(checkData()==1);
        {
            sname = sn;
        }
    }
}

class Plane
{
    private String name;
    private int time;
    private int delay;
    private Passenger place[];

    public Plane( String n,int d, int dl, int p)
    {
        name = n;
        delay = dl;
        time = d;
        place = new Passenger[p+1];
    }
    public void add( int p,String n,String sn)
    {
        place[p].giveName(n);
        place[p].giveSname(sn);
    }
}

public class first
{
    public static void main (String[] args)
    {
        Plane plane1 = new Plane("samolot",13,0,100);

        plane1.add(2,"jan","nowak");
        plane1.add(2,"jan","nowak");
    }

}
2
  1. Tworzysz tablicę obiektów typu Passenger, lecz nie tworzysz nigdzie samej instancji tego obiektu.
  2. Nazywaj parametry sensowniej: co Ci mówi nazwa dl albo p? id/index/counter i każdy wie o co chodzi.
1

Nigdzie nie tworzysz elementów tablicy place.

    public Plane( String n,int d, int dl, int p)
    {
        name = n;
        delay = dl;
        time = d;
        place = new Passenger[p+1]; //dlaczego tak, a nie new Passenger[p]?
        for(int i=0;i<place.length;i++)
        {
             place[i] = new Passenger();
        }
    }
0

faktycznie dzięki za pomoc :)

PS rozmiar tablicy do p+1 ponieważ chciałem żeby miejsca zaczynały się od 1 do 100 włącznie żeby nie kombinować z transformacją indeksów na miejsca w samolocie

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0