Wie kann ich mir eine Array-Liste ausgeben lassen?
Ich soll ein CD-Regal mit 50 Plätzen erstellen (BlueJ; Java). Bei meiner Programmierung funktioniert soweit auch alles, nur dass ich eine seltsame Rückgabe bekomme, wenn ich mir die Liste ausgeben lasse.
Ich habe das Programm (siehe unten) durchgetestet und alles, außer die Rückgabe der Liste, funktioniert. Es wird sowohl die richtige Anzahl CDs gespeichert (also 0, 1... 50), als auch die richtigen Daten, die ich eingebe. Einzig und allein die Ausgabe der Liste funktioniert nicht.
Ich würde mich freuen, wenn mir jemand weiterhelfen könnte.
Vielen lieben Dank schon mal im Vorfeld. <3
public class CD_Regal {
public int cdanzahl;
private CD[] cDSammlung;
private String cdEintragen;
public CD_Regal() {
cDSammlumg = new CD[50];
cdanzahl = 0;
}
public void cdEintragen(String pTitel; String pInterpret; int Erscheinungsjahr) {
if (cdanzahl == 50) {
System.out.println("Das Regal ist voll! Entferne CDs um neue hinzuzufügen!")
}
else if (pErscheinungsjahr > 0 && pErscheinungsjahr < 2021) {
cDSammlung[cdanzahl] = new CD(pTitel, pInterpret, pErscheinungsjahr);
cdanzahl ++;
}
else {
System.out.println("Die Eintragung is fehlgeschlagen! Überprüfen Sie die Daten!");
}
}
public void gibListe() {
If (cdanzahl > 0) {
System.out.println(cDSammlung.length);
}
Else {
System.out.println("Keine CD!")
}
}
}
Ich bekomme jetzt den Inhalt der Liste ausgegeben, allerdings auch eine Fehlermeldung:
java.lang.NullPointException
at CD_Regal.gibListe(CD_Regal.java:48)
Wisst Ihr, was das bedeutet.
Vielen Dank nochmal
2 Antworten
System.out.println(cDSammlung.length);
Gibt dir ja nur die Länge der Liste aus.
Um an die tatsächlichen Inhalte deiner Liste zu kommen, könntest / solltest du eine for-schleife verwenden:
for(CD c : cDSammlung){
System.out.println(c.name);
}
c.name muss dann natürlich irgendein Attribut sein, das die Klasse CD hat und worauf auch zugegriffen werden kann.
Ok hab das gerade rein geschrieben. Ich bekomme jetzt den Inhalt der Liste ausgegeben, allerdings auch eine Fehlermeldung:
java.lang.NullPointException
at CD_Regal.gibListe(CD_Regal.java:48)
Aber wenigstens kann ich jetzt sehen, was in der Liste steht xD
Abgesehen von dem Fehler, den dir xLucarix bereits benannt hat, kann dein Code da oben nicht funktionieren. Es sind verschiedene Syntaxfehler vorhanden.
1) Hier:
public void cdEintragen(String pTitel; String pInterpret; int Erscheinungsjahr)
trennst du die Parameter jeweils mit Semikolons, statt Kommazeichen.
2) Die Variable pErscheinungsjahr wird nirgendwo deklariert. Du hast wohl das p im Methodenkopf vergessen.
3) Da Java case-sensitive agiert, müssen if und else komplett mit Kleinbuchstaben geschrieben werden.
4) Bei deinem letzten println-Aufruf fehlt am Ende der Zeile das abschließende Semikola.
Im Übrigen wären noch folgende Veränderungen gut:
- Vergleiche nicht mit 50, sondern mit der Länge des Arrays (cDSammlung.length). Das macht dein Programm flexibler, denn nun braucht bei einer Längenänderung nur die Größe des Arrays angefasst werden. Nicht aber das if-Konstrukt.
- Wenn du einen einheitlichen Stil wahren würdest. Nutze auch für Klassennamen die kamelHoeckerSchreibweise (CdRegal). Die Variable cdanzahl müsste cdAnzahl heißen.
- Vermeide es, doppelte Bezeichner zu verwenden. Du hast bei dir eine Variable cdEintragen, die den selben Namen wie eine Methode hat. Das kann schnell verwirren.
- Deine Methode gibListe gibt nichts an den Aufrufer zurück, sondern führt etwas auf der Konsole aus. Daher wäre ein Name wie: gibListeAus o.ä. passender.
- Auf diese Typcodierung mit dem p für Parameter würde ich vollends verzichten. Denn wo liegt der relevante Unterschied, ob es sich gerade um einen Parameter handelt oder eine Variable, die später in der Methode deklariert wurde? Klassen- und instanzbezogene Variablen kannst du bei Bedarf über den Klassennamen / this ansprechen.
Viele Dank für die Antwort. Bei 1, 3 und 4 war das hier meine eigene Dummheit bzw. die Autokorrektur, steht aber richtig im Programm ;)
2 habe ich woanders deklariert, allerdings hat das nicht mehr richtig in die Frage gepasst, deshalb hab ich das hier weggelassen xD
Deine Sonstigen Anmerkungen werde ich mir zu Herzen nehmen und in die Programmierung mit aufnehmen :D