# nullpointerexception, finde den fehler nicht ...



## lennero (19. Apr 2017)

hallo
es soll eine klasse mit 4 attributen erstellt werden, dann eine main in der alles getestet wird. in zeile 18 der main funktion bekomme ich eine nullpointerexception und hab keine ahnung wieso... könnte mir jemand helfen ?


```
package uebung2;

public class Stadt {

    private String name,plz;
    private int einwohner;
    private boolean gross;

    public Stadt(){

    }

    public Stadt(String name,String plz,int einwohner){
        this.name=name;
        this.plz=plz;
        this.einwohner=einwohner;
        }

    public void setName(String name){
        this.name=name;
    }

    public void setPlz(String plz){
        this.plz=plz;
    }

    public void setEinwohner(int einwohner){
        this.einwohner=einwohner;

        if(einwohner>=100000){
            gross=true;
        }
        else
            gross=false;
    }

    public String getName(){
        return name;
    }

    public String getPlz(){
        return plz;
    }

    public int getEinwohner(){
        return einwohner;

    }

    public String stadtInfo(){
        String ausgabe;

        ausgabe = name+", PLZ: "+plz+", "+einwohner+" Einwohner";
        if(gross){
            ausgabe+=", Großstadt";



        }
        else
            ausgabe+=", Kleinstadt";

            return ausgabe;
    }

}
```

main :


```
package uebung2;

import javax.swing.JOptionPane;

public class Stadtapp {

    public static void main(String[] args) {
        final int l = 4;

        Stadt[] landkr = new Stadt[l];

        for(int i=0;i<landkr.length;i++){


            String eingab1,eingab2,eingab3;
            int einw;
            eingab1 = JOptionPane.showInputDialog("Stadt Nr "+(i+1)+". eingeben");
            landkr[i].setName(eingab1);
            eingab2 = JOptionPane.showInputDialog("PLZ der Stadt");
            landkr[i].setPlz(eingab2);
            eingab3 = JOptionPane.showInputDialog("Einwohneranzahl der Stadt");
            einw = Integer.parseInt(eingab3);
            landkr[i].setEinwohner(einw);

            landkr[i] = new Stadt(landkr[i].getName(),landkr[i].getPlz(),landkr[i].getEinwohner());

        }

        for(int i=0;i<landkr.length;i++){
            System.out.println(landkr[i].stadtInfo());
        }

    }

}
```


----------



## thecain (19. Apr 2017)

müssen wir die nullpointerexception suchen oder zeigst du uns den StackTrace? Dann siehst du auch selber die Zeile und da ist der Nullpointer.

LandKr1 wird wahrscheinlich noch keine Stadt Instanz sein, denn ich sehe kein new. Nur ein Array mit null gefüllt.

der Debugger hilft da.


----------



## JCODA (19. Apr 2017)

Du greifst auf 
	
	
	
	





```
landkr[i].setName(eingab1);
```
 zu, aber zu diesem Zeitpunkt innerhalb der main steht in 
	
	
	
	





```
landkr[i]
```
noch null. Hör auf die Setter aufzurufen, es reicht wenn du das Objekt per richtigen Konstruktor erstellst, Hier musst du einfach nur die richtigen Variablen, also die du du oben in den settern übergibst, übergeben.


----------



## lennero (19. Apr 2017)

JCODA hat gesagt.:


> Du greifst auf
> 
> 
> 
> ...



es soll aber in setEinwohner geprüft werden ob es sich um eine großstadt handelt, wird das denn gemacht falls ich die variable direkt an den konstruktor übergebe ? ich bekomme nämlich egal welche einwohnerzahl ich eingebe nur "kleinstadt" ausgegeben...


----------



## JCODA (19. Apr 2017)

lennero hat gesagt.:


> es soll aber in setEinwohner geprüft werden ob es sich um eine großstadt handelt, wird das denn gemacht falls ich die variable direkt an den konstruktor übergebe ? ich bekomme nämlich egal welche einwohnerzahl ich eingebe nur "kleinstadt" ausgegeben...


ruf innerhalb des konstruktors die setter auf...


----------



## mrBrown (19. Apr 2017)

Es würde auch ein `landkr[i] = new Stadt();` am Anfang der Schleife reichen, schöner ist aber die Varianten mit passendem Konstruktor[/i]


----------



## lennero (19. Apr 2017)

JCODA hat gesagt.:


> ruf innerhalb des konstruktors die setter auf...



bekomme als ausgabe trotzdem immer nur kleinstadt egal welche zahl ich eingebe


----------



## JCODA (19. Apr 2017)

lennero hat gesagt.:


> bekomme als ausgabe trotzdem immer nur kleinstadt egal welche zahl ich eingebe


zeig doch nochmal den code, den du jetzt ausführst


----------



## mrBrown (19. Apr 2017)

Dann zeig doch mal deine Code dazu


----------



## lennero (19. Apr 2017)

sorry, funktioniert wohl doch, hier der code
main:

```
package uebung2;

import javax.swing.JOptionPane;

public class Stadtapp {

    public static void main(String[] args) {
        final int l = 4;

        Stadt[] landkr = new Stadt[l];

        for(int i=0;i<landkr.length;i++){

            landkr[i] = new Stadt();

            String eingab1,eingab2,eingab3;
            int einw;
            eingab1 = JOptionPane.showInputDialog("Stadt Nr "+(i+1)+". eingeben");
            eingab2 = JOptionPane.showInputDialog("PLZ der Stadt");
            eingab3 = JOptionPane.showInputDialog("Einwohneranzahl der Stadt");
            einw = Integer.parseInt(eingab3);

            landkr[i] = new Stadt(eingab1,eingab2,einw);

        }

        for(int i=0;i<landkr.length;i++){
            System.out.println(landkr[i].stadtInfo());
        }

    }

}
```


```
package uebung2;

public class Stadt {

    private String name,plz;
    private int einwohner;
    private boolean gross;

    public Stadt(){

    }

    public Stadt(String name,String plz,int einwohner){
        setName(name);
        setPlz(plz);
        setEinwohner(einwohner);
        }

    public void setName(String name){
        this.name=name;
    }

    public void setPlz(String plz){
        this.plz=plz;
    }

    public void setEinwohner(int einwohner){


        if(einwohner>=100000){
            gross=true;
        }
        else
            gross=false;


        this.einwohner=einwohner;
    }

    public String getName(){
        return name;
    }

    public String getPlz(){
        return plz;
    }

    public int getEinwohner(){
        return einwohner;

    }

    public String stadtInfo(){
        String ausgabe;

        ausgabe = name+", PLZ: "+plz+", "+einwohner+" Einwohner";
        if(gross){
            ausgabe+=", Großstadt";

            return ausgabe;

        }
        else
            ausgabe+=", Kleinstadt";

            return ausgabe;
    }

}
```


----------

