nullpointerexception, finde den fehler nicht ...

lennero

Bekanntes Mitglied
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 ?

Java:
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 :

Java:
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

Top Contributor
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

Top Contributor
Du greifst auf
Java:
landkr[i].setName(eingab1);
zu, aber zu diesem Zeitpunkt innerhalb der main steht in
Java:
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

Bekanntes Mitglied
Du greifst auf
Java:
landkr[i].setName(eingab1);
zu, aber zu diesem Zeitpunkt innerhalb der main steht in
Java:
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.

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...
 

mrBrown

Super-Moderator
Mitarbeiter
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

Bekanntes Mitglied
sorry, funktioniert wohl doch, hier der code
main:
Java:
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());
        }

    }

}
Java:
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;
    }

}
 

Neue Themen


Oben