Objekt-Array ausgeben

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo,

ich möchte mein Objekt-Array ausgeben.
Dachte mir das folgendermaßen:
Code:
public void printKunde() throws IOException {  
        for (int i = 0; i < kundenFeld.length; i++)
        kundenFeld[i].schreibeKunden();
    }

Und die Methode zum ausgeben:
Code:
public void schreibeKunden() {  
       System.out.println(kundennummer+" "+name+" "+vorname+" "+ anschrift); 
    }

als ergebnis bekomm ich immer eine NullPointerException...???
obwohl das feld eigentlich gefüllt ist...
 

Kim Stebel

Bekanntes Mitglied
poste den code, der das array füllen soll. oder geh gleich selbst mit nem debugger durch diesen code und schau was schiefläuft.
 
G

Guest

Gast
also beim wird zuerst folgende methode aufgerufen:
Code:
public void erzeugeKunden(int anzahl) throws IOException { 
        
        kundenFeld = new Kunde[anzahl];
              
        for (int i = 0; i < anzahl; i++) {
            kundenFeld[i] = createKunde();
        }
        Steuerung steuerung = new Steuerung();
        steuerung.menu();
        
    }

dann diese...
Code:
public Kunde createKunde() throws IOException { 
        Kunde kunde = new Kunde();
        this.liesKunde(kunde);
        return kunde; 
    }

und dann diese...
Code:
public void liesKunde(Kunde kunde) throws IOException 
    {
        System.out.println("Kundennummer:"); 
        kunde.setKundennummer(MeineEingabe.erfasseInt());
        System.out.println("Name:");
        kunde.setName(MeineEingabe.erfasseText());
        System.out.println("Vorname:");
        kunde.setVorname(MeineEingabe.erfasseText());
        
        this.liesAnschrift(kunde);    
    }

und zu guter letzt die anschrift...
Code:
public void liesAnschrift(Kunde kunde) throws IOException { //erkennt Datentyp Kunde nicht!!!
        Anschrift anschr = new Anschrift();
        
        System.out.println("Wie lautet die Strasse der Person?"); 
        String strasse = MeineEingabe.erfasseText(); 
        anschr.setStrasse(strasse);
        
        System.out.println("Wie lautet die Hausnummer?"); 
        String hausnummer = MeineEingabe.erfasseText();  
        anschr.setHausNr(hausnummer);
        
        System.out.println("Wie lautet die Postleitzahl?"); 
        int plz = MeineEingabe.erfasseInt(); 
        while (plz < 10000 || plz > 99999) { 
            System.out.println("Die Postleitzahl darf maximal 5 Stellen haben."); 
            plz = MeineEingabe.erfasseInt();
            anschr.setPlz(plz);
        }
        System.out.println("Wie lautet der Ort?"); 
        String ort = MeineEingabe.erfasseText();
        anschr.setOrt(ort);
        
         
    }
 

Murray

Top Contributor
Ich nehme an, erzeugeKunden wird auch aufgerufen. Kann es sein, dass debei eine Exception auftritt? Wenn z.B. in liesAnschrift eine IOException auftritt, wird diese immer weiter hochgeworfen und sorgt dafür, dass die Schleife abgebrochen wird.
 

Leroy42

Top Contributor
Anonymous hat gesagt.:
als ergebnis bekomm ich immer eine NullPointerException...???

Bevor wir hier weiter sinnlos herumraten, poste die NPE und
zeige die Zeilen im Java-Programm, wo die NPE auftritt
(und ein paar ums sie herum)
 

Murray

Top Contributor
Anonymous hat gesagt.:
aber was soll denn da falsch sein?
ich kapier das nicht.
Wie gesagt: sollte in der Schleife irgendwo eine IOException kommen, dann wird die Schleife abgebrochen, und dadurch bleiben die restliche Array-Element uninitialisiert.
 
G

Guest

Gast
Code:
public void printKunde() throws IOException { 
        for (int i = 0; i < kundenFeld.length; i++)  //<=== dort tritt sie auf
        kundenFeld[i].schreibeKunden();
    }

und so sieht die exception aus..
Code:
Exception in thread "main" java.lang.NullPointerException
        at ueb1.Kunde.printKunde(Kunde.java:163)
        at ueb1.Steuerung.menu(Steuerung.java:40)
        at ueb1.Kunde.erzeugeKunden(Kunde.java:134)
        at ueb1.Steuerung.menu(Steuerung.java:37)
        at ueb1.VererbungenMain.main(VererbungenMain.java:14)
Java Result: 1
 

Murray

Top Contributor
Mach mal nur zur Sicherheit etwas "poor man's debugging":
Code:
public void printKunde() throws IOException {

        System.out.println( getClass().getName() + ".printKunde: kundenFeld=" + kundenFeld);


        for (int i = 0; i < kundenFeld.length; i++)  {
           System.out.println( getClass().getName() + ".printKunde: kundenFeld[" + i + "]=" + kundenFeld[i]);
            kundenFeld[i].schreibeKunden();
        }
    }


Mich wundert der StackTrace etwas: aus erzeugeKunde über den Umweg Steuerung.menu nach printKunde ?? Das gibt der gepostete Code so nicht her.
 

Leroy42

Top Contributor
Code:
 for (int i = 0; i < kundenFeld.length; i++)  //<=== dort tritt sie auf

Na dass ist doch mal eindeutig: kundenFeld ist null

Wo wird kundenFeld denn initialisiert?
 
G

Guest

Gast
naja nachdem der kunde erzeugt wurde, wird wieder das menü (steuerung) aufgerufen.
und dann wird von da aus printKunde aufgerufen
 
G

Guest

Gast
kundenFeld[] wird in der methode erzeugeKunde() initialisiert.
siehe oben^^
 
G

Guest

Gast
nachdem poo men dubugging kommt folgende exception:
Code:
Exception in thread "main" java.lang.NullPointerException
ueb1.Kunde.printKunde: kundenFeld=null                         <<<======
        at ueb1.Kunde.printKunde(Kunde.java:173)
        at ueb1.Steuerung.menu(Steuerung.java:40)
        at ueb1.Kunde.erzeugeKunden(Kunde.java:135)
        at ueb1.Steuerung.menu(Steuerung.java:37)
        at ueb1.VererbungenMain.main(VererbungenMain.java:14)
Java Result: 1
 

Murray

Top Contributor
Anonymous hat gesagt.:
naja nachdem der kunde erzeugt wurde, wird wieder das menü (steuerung) aufgerufen.
und dann wird von da aus printKunde aufgerufen
So eine Programmsteuerung würde ich mir schnell abgewöhnen - dein ganzes Programm besteht so aus einer Kette von Sprüngen in Unterfunktionen, zu denen es keine Rücksprünge gibt - irgendwann läuft da der Stack über. Aber das kann hier nicht die Fehlerursache sein.

Wird kundenFeld irgendwo anders im Programm nochmal zugewiesen?
 

Leroy42

Top Contributor
Anonymous hat gesagt.:
kundenFeld[] wird in der methode erzeugeKunde() initialisiert.
siehe oben^^

Kann es sein, dass du in der print-Methode auf ein
völlig anderes kundenFeld zugreifst, als das,
das du initialisiert hast?
 

Murray

Top Contributor
Ist kundenFeld vielleicht statisch?

Und steht im Konstruktor der Klasse vielleicht etwas wie kundenFeld = null?
 
G

Guest

Gast
vielleicht noch folgendes, so schaut das menü aus:

Code:
public class Steuerung {
    Kunde kunde = new Kunde();
    
    public void menu() throws IOException {
    System.out.println ("KUNDENDATENBANK"); 
        System.out.println ("**************************************"); 
        System.out.println ("1. 10 Muster-Kunden einlesen"); 
        System.out.println ("2. Einzelnen Kunden erfassen");
        System.out.println ("3. 10 Stammkunden einlesen");
        System.out.println ("4. Einzelnen Stammkunden erfassen");
        System.out.println ("5. Kunde ausgeben"); 
        System.out.println ("6. Stammkunde ausgeben");  
        System.out.println ("7. Ende"); 
        System.out.println ("**************************************\n");
        
        int zahl = MeineEingabe.erfasseInt();
        
        switch (zahl) { 
            case 1: kunde.erzeugeKunden(10); break;
            case 2: kunde.erzeugeKunden(1);  // 
            case 3: kunde.erzeugeStammKunden(10); break;
            case 4: kunde.erzeugeStammKunden(1); break;
            case 5: kunde.printKunde(); break; //funzt
            case 6: kunde.printStammKunde(); break; 
            case 7: 
                System.out.println("Programmende!"); 
                System.exit(0); 
        }
        

    }
}
 

Murray

Top Contributor
Du erzeugst am Ende eienr Methode ja immer ein neues "Steuerung"-Objekt - und damit auch einen neuen Kunden. Wie schon gesagt, die Programmsteuerung ist eher suboptimal - auf die Schnelle könntest du es zum Laufen bringen, indem du das "Steuerung"-Objekt in die Methoden durchreichst, also in etwa:
Code:
public class Steuerung {
    Kunde kunde = new Kunde();
   
    public void menu() throws IOException {
    System.out.println ("KUNDENDATENBANK");
        System.out.println ("**************************************");
        System.out.println ("1. 10 Muster-Kunden einlesen");
        System.out.println ("2. Einzelnen Kunden erfassen");
        System.out.println ("3. 10 Stammkunden einlesen");
        System.out.println ("4. Einzelnen Stammkunden erfassen");
        System.out.println ("5. Kunde ausgeben");
        System.out.println ("6. Stammkunde ausgeben"); 
        System.out.println ("7. Ende");
        System.out.println ("**************************************\n");
       
        int zahl = MeineEingabe.erfasseInt();
       
        switch (zahl) {
            case 1: kunde.erzeugeKunden(10, this); break;
            case 2: kunde.erzeugeKunden(1, this);  //
            case 3: kunde.erzeugeStammKunden(10, this); break;
            case 4: kunde.erzeugeStammKunden(1, this); break;
            case 5: kunde.printKunde( this); break; //funzt
            case 6: kunde.printStammKunde( this); break;
            case 7:
                System.out.println("Programmende!");
                System.exit(0);
        }
       

    }
}

public class Kunde {

  public erzeugeKunden( int anzahl, Steuerung st) {
    /* ... */

    st.menu();

  }
  /* ... */

}

Dann bleibt aber das Problem des irgendwann überlaufenden Stacks.

Besser also:
Code:
public class Steuerung {
    Kunde kunde = new Kunde();
   
    public void menu() throws IOException {

      while ( true)
        System.out.println ("KUNDENDATENBANK");
        System.out.println ("**************************************");
        System.out.println ("1. 10 Muster-Kunden einlesen");
        System.out.println ("2. Einzelnen Kunden erfassen");
        System.out.println ("3. 10 Stammkunden einlesen");
        System.out.println ("4. Einzelnen Stammkunden erfassen");
        System.out.println ("5. Kunde ausgeben");
        System.out.println ("6. Stammkunde ausgeben"); 
        System.out.println ("7. Ende");
        System.out.println ("**************************************\n");
       
        int zahl = MeineEingabe.erfasseInt();
       
        switch (zahl) {
            case 1: kunde.erzeugeKunden(10); break;
            case 2: kunde.erzeugeKunden(1);  //
            case 3: kunde.erzeugeStammKunden(10); break;
            case 4: kunde.erzeugeStammKunden(1); break;
            case 5: kunde.printKunde(); break; //funzt
            case 6: kunde.printStammKunde(; break;
            case 7:
                System.out.println("Programmende!");
                System.exit(0);
        }
      }
    }
}
In diesem Fall dann natürlich ohne die Aufrufe von Steuerung#menu() am Ende der einzelnen Operationen.
 
G

Guest

Gast
hab letztere der beiden Varianten mal ausprobiert.
nachdem er den kunden eingelesen hat, soll er ja wieder ins menü zurückkommen.
das passiert auch.
aber wenn ich dort jetzt "kunden ausgeben" anwähle, bleibt das menü immer stehen???
 

Murray

Top Contributor
Wie seiht denn die Methode Kunde.printKunde jetzt aus? Sind da noch die Ausschreibungen drin? Siehst du diese Ausschreibungen noch in der Konsole?

Grundsätzlich ist es ja nicht falsch, dass das Menü sichtbar bleibt; ich sehe zumindest keinen Code, der es irgendwie "verschwinden lassen" würde.
 
G

Guest

Gast
achso, nee funktioniert!
musste in der konsoe nur ein bisl hochscrollen, dann hab ich die ausgabe des kunden gesehen. :wink:
 
G

Guest

Gast
wenn ich jetzt die methode so umgestalten möchte, dass genau der kunde angezeigt wird, deren kundennummer man eingibt, wie müsste das ausschauen?

Code:
public void printKunde() throws IOException {

        for (int i = 0; i < kundenFeld.length; i++)  {
            kundenFeld[i].schreibeKunden();

        }// enf of for
    } //end of method printKunde()
 
G

Guest

Gast
habs jetzt so gelöst:
Code:
public void printKunde() throws IOException {
        
        System.out.println("Kundennummer: ");
        int wert = MeineEingabe.erfasseInt();
             
        for (int i = 0; i < kundenFeld.length; i++)  {
            if (kundenFeld[i].kundennummer == wert)
            kundenFeld[i].schreibeKunden();
        }// enf of for
         
    } //end of method printKunde()
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Objekt Array Aufgabe mit Busdatenbank Allgemeine Java-Themen 2
E Datentypen Wie kann ich die Längen der unterschiedlichen Ebenen aus einem Objekt lesen von dem ich weiß, dass es ein mehrdimensionaler Array ist? Allgemeine Java-Themen 3
Drachenbauer Wie stelle ich fest, ob ein Objekt in meinem Array vorkommt? Allgemeine Java-Themen 5
L Objekt aus Objekt-array "löschen" Allgemeine Java-Themen 2
T Objekt in Array packen Allgemeine Java-Themen 6
S Byte Array welches in Laufzeit aufgelöst wird // Objekt Array Allgemeine Java-Themen 3
P Objekt Array in Datei Speichern Allgemeine Java-Themen 3
A Objekt in einem Array erzeugen Allgemeine Java-Themen 6
N Lwjgl 3d Objekt wird schmaler, wenn es sich dreht Allgemeine Java-Themen 0
B Ein Objekt einer Klasse mehreren anderen Klassen zur Verfügung stellen? Allgemeine Java-Themen 6
Maxi-JOO Klassen Dummy Objekt in anderen Constructor übergeben Allgemeine Java-Themen 5
el_niiinho13 Objekt auf der Konsole ausgeben lassen Allgemeine Java-Themen 8
d.lumpi Aus Einer Klasse auf ein Objekt einer anderen Klasse Zugreifen Allgemeine Java-Themen 1
A Objekt aus anderen Objekten machen Allgemeine Java-Themen 8
SaftigMelo In einem Winkel Objekt bewegen Allgemeine Java-Themen 2
H Objekt speichern und laden Allgemeine Java-Themen 1
H Objekt speichern und laden Allgemeine Java-Themen 1
J Objekt in Bytestream umwandeln Allgemeine Java-Themen 12
J Wie kann ich von Vornherrein einen Fokus auf ein Objekt entfernen? Allgemeine Java-Themen 3
J Information von getSource() Objekt auslesen Allgemeine Java-Themen 1
S Variable als Objekt Name Allgemeine Java-Themen 3
D Input/Output Zwischen zwei ID-Räumen unterscheiden und Objekt löschen Allgemeine Java-Themen 16
T Objekt mit String und Int aus TxT Datei erstellen Allgemeine Java-Themen 23
K Methodenaufruf mit String / String zu Objekt konvertieren Allgemeine Java-Themen 8
S Neues Objekt darstellen Allgemeine Java-Themen 4
J Best Practice Objekt an alle Klassen verteilen ( Discord Bot ) Allgemeine Java-Themen 7
D Objekt-Suche mit mehreren optionalen Parametern Allgemeine Java-Themen 6
M Klassen Objekt weiter geben Allgemeine Java-Themen 1
B Klassen Objekt erzeugen und Konstruktor aufrufen - Welche Lösung ist besser? Allgemeine Java-Themen 2
L Variablen Eigenes Objekt wie z.B. einen Integer zuweisen Allgemeine Java-Themen 3
D Konstruktor - jedes Objekt einzeln erzeugen - alternative? Allgemeine Java-Themen 8
S Applet Überprüfen ob ein Objekt angeklickt wurde Allgemeine Java-Themen 2
RalleYTN 3D Objekt Translation basierend auf Rotation (Probleme mit Z Rotation) Allgemeine Java-Themen 0
B Von String zu <Objekt> ||Speichern/Laden Allgemeine Java-Themen 17
G Neues Objekt aus List<JsonObject> mit Stream Allgemeine Java-Themen 4
P Threads Objekt im Konstruktor anders wie im Run()-Block Allgemeine Java-Themen 10
R Objekt funktioniert nicht auf iOS Allgemeine Java-Themen 15
K Textdatei als Objekt Allgemeine Java-Themen 4
Viktim Classenname zu Objekt Allgemeine Java-Themen 4
P Entity Objekt Methoden vs Service methoden Allgemeine Java-Themen 2
D Datentypen Klassenattribut aus Objekt in generischer Liste Allgemeine Java-Themen 15
O Klassen Bruch im gleichen Objekt Speichern Allgemeine Java-Themen 1
P Liste zu Objekt umwandeln Allgemeine Java-Themen 4
C Liste checken auf MINDESTENS ein Objekt | Bukkit Allgemeine Java-Themen 3
K Best Practice JFrame Objekt allgemein zugänglich machen Allgemeine Java-Themen 8
B ArrayList in ein Objekt legen Allgemeine Java-Themen 1
D Objekt entlang eines Funktionsgraphens bewegen Allgemeine Java-Themen 6
M Objekt serialisieren/deserialisieren und in einer SQLite-Datenbank speichern Allgemeine Java-Themen 3
D Java Objekt als Service in Runtime registrieren Allgemeine Java-Themen 1
S Interaktion mit einer website (website als Objekt?) Allgemeine Java-Themen 3
J OOP Überwachen, ob ein Objekt erzeugt wird Allgemeine Java-Themen 9
Thallius Hash über serialisiertes Objekt? Allgemeine Java-Themen 3
Developer_X Input/Output Serialisiertes Objekt speichern und laden Allgemeine Java-Themen 1
C Generics Objekt in ArrayList Allgemeine Java-Themen 2
L Klassen Konstruktor soll Objekt anderer Klasse erzeugen Allgemeine Java-Themen 2
F Neues Objekt aus .CSV definition Allgemeine Java-Themen 3
K Methoden Objekt wird nicht erkannt Allgemeine Java-Themen 11
P Objekt mit verschiedenen Datentypen Allgemeine Java-Themen 5
T Objekt kontaktiert seinen "erzeuger" Allgemeine Java-Themen 5
S Objekt orientierte Programmierung Allgemeine Java-Themen 7
C Objekt Datenverlust nach Methodenaufruf Allgemeine Java-Themen 9
H JavaFX Von einer Methode auf stage-Objekt zugreifen Allgemeine Java-Themen 3
T WeakReference/PhantomReference: Mitbekommen WELCHES Objekt nun GC'ed wird Allgemeine Java-Themen 2
T Class-Objekt mit URLClassloader Allgemeine Java-Themen 7
P Konsoleneingabe übernehmen und Objekt instanzieren. Allgemeine Java-Themen 5
E Auf Java-Objekt aus anderer Instanz zugreifen Allgemeine Java-Themen 26
L Klassen Polymorphie:2 Attribute gleichen Namens in einem Objekt Allgemeine Java-Themen 6
F Dynamisch ein Objekt einer bestimmten Subklasse erstellen Allgemeine Java-Themen 7
D Player Objekt - Frame über Server anzeigen lassen. Allgemeine Java-Themen 3
V Objekt löschen Allgemeine Java-Themen 7
A OOP Wie auf Objekt der Superklasse zugreifen? Allgemeine Java-Themen 6
S Datei in File-Objekt mit UTF-8 einlesen Allgemeine Java-Themen 2
M neues Objekt speichern, nicht Referenz Allgemeine Java-Themen 10
B synchronisierter zugriff auf Objekt Allgemeine Java-Themen 6
F Objekt einer Datei verschieben, aber Verzeichnispfad fehlt Allgemeine Java-Themen 6
C Objekt Typ herausfinden Allgemeine Java-Themen 5
E Objekt beim Erzeugen in ArrayList Allgemeine Java-Themen 9
M Objekt prüfen auf null ->Invocation Target Exception??? Allgemeine Java-Themen 2
M Objekt aus Liste in Liste suchen/löschen Allgemeine Java-Themen 6
D Eigenen Objekt Pool Allgemeine Java-Themen 15
C blueJ: Objekt wird nicht in Objektleiste angezeigt Allgemeine Java-Themen 8
T Objekt 2x deserialisieren, aber nur 1x im Heap haben? Allgemeine Java-Themen 4
sambalmueslie Benachrichtigung bei neuer Objekt-Instanz Allgemeine Java-Themen 5
U Konstante in Objekt definieren Allgemeine Java-Themen 6
D this mit Objekt überschreiben Allgemeine Java-Themen 17
R Synchronized - auf welchem Objekt Allgemeine Java-Themen 16
E Objekt erstellen Allgemeine Java-Themen 7
M Timer von nicht existiertem Objekt stopen Allgemeine Java-Themen 5
M Swing-Frontend abhängig von ausgewähltem Objekt Allgemeine Java-Themen 4
J Lebt das Objekt noch?? Allgemeine Java-Themen 12
K Objekt einer konkreten Implementierung eines Interfaces durch übergebenen String Allgemeine Java-Themen 2
K Objekt-Austausch zwischen zwei Programmen über System-Clipboard Allgemeine Java-Themen 5
S Performance Frage: Objekt oder static? Allgemeine Java-Themen 33
B Speicherverbrauch Objekt-Referenz Allgemeine Java-Themen 11
D Browser-Objekt erzeugen Allgemeine Java-Themen 8
B FileWriter / FileReader testen / Mock-Objekt für Unit Tests? Allgemeine Java-Themen 6
A Iterationen einer XML-Datei in einem Objekt sichern Allgemeine Java-Themen 5
R Objekt zur Laufzeit zerstören? Allgemeine Java-Themen 12
hdi Frage zur Objekt Initialisierung Allgemeine Java-Themen 4
X Prozess-Objekt nach Ausführung der destroy-Methode null oder nicht null ? Allgemeine Java-Themen 10

Ähnliche Java Themen

Neue Themen


Oben