Hallo allerseits, ich versuche ein Programm zu Archivierung von CD's zu schreiben.
Das Programm besteht aus einer Klasse CdListe{} und einer Inneren Klasse Cd{}.
Diese beiden Klassen sind vorgegeben.
Der Konstruktor der äußeren Klasse fragt über die Konsole einen Namen und die Anzahl der zu archivierenden Cd's ab. Anschließend wird im Konstruktor der Klasse CdListe{} der Konstruktor der Klasse Cd{} aufgerufen. Der Konstruktor der Klasse
Cd{} erzeugt je nach Angabe CdObjekte und hängt diese in liste1 ein.
Nun zu mein Problem, alle Stellen der Liste liste1 werden mit dem Selben Objekt überschrieben, dies verstehe ich nicht.
Beispiel:
Bitte geben Sie den Namen der zu erstellenden CdListe ein:
Klassik
Bitte geben Sie die Anzahl der Cd's ein die Sie archivieren wollen:
2
Bitte geben Sie den Namen der Cd ein:
Oxygene
Bitte geben sie den Namen des Künstlers ein:
Jean Michel Jarre
Bitte geben Sie das Erscheinungsjahr ein:
1972
Bitte geben Sie den Namen der Cd ein:
CHRONOLOGIE
Bitte geben sie den Namen des Künstlers ein:
Jean Michel Jarre
Bitte geben Sie das Erscheinungsjahr ein:
1994
Die Ausgabe der Liste liste1 für zu folgendem Ergebnis:
Titel: CHRONOLOGIE Künstler: Jean Michel Jarre Jahr: 1994
Titel: CHRONOLOGIE Künstler: Jean Michel Jarre Jahr: 1994
Warum werden beide Felder mit demselben Objekt überschieben?
Ich würde gerne folgende Ausgabe erreichen und hätte diese auch erwartet:
Titel: Oxygene Künstler: Jean Michel Jarre Jahr: 1972
Titel: CHRONOLOGIE Künstler: Jean Michel Jarre Jahr: 1994
Danke für jede Antwort!
Hier der Code:
Das Programm besteht aus einer Klasse CdListe{} und einer Inneren Klasse Cd{}.
Diese beiden Klassen sind vorgegeben.
Der Konstruktor der äußeren Klasse fragt über die Konsole einen Namen und die Anzahl der zu archivierenden Cd's ab. Anschließend wird im Konstruktor der Klasse CdListe{} der Konstruktor der Klasse Cd{} aufgerufen. Der Konstruktor der Klasse
Cd{} erzeugt je nach Angabe CdObjekte und hängt diese in liste1 ein.
Nun zu mein Problem, alle Stellen der Liste liste1 werden mit dem Selben Objekt überschrieben, dies verstehe ich nicht.
Beispiel:
Bitte geben Sie den Namen der zu erstellenden CdListe ein:
Klassik
Bitte geben Sie die Anzahl der Cd's ein die Sie archivieren wollen:
2
Bitte geben Sie den Namen der Cd ein:
Oxygene
Bitte geben sie den Namen des Künstlers ein:
Jean Michel Jarre
Bitte geben Sie das Erscheinungsjahr ein:
1972
Bitte geben Sie den Namen der Cd ein:
CHRONOLOGIE
Bitte geben sie den Namen des Künstlers ein:
Jean Michel Jarre
Bitte geben Sie das Erscheinungsjahr ein:
1994
Die Ausgabe der Liste liste1 für zu folgendem Ergebnis:
Titel: CHRONOLOGIE Künstler: Jean Michel Jarre Jahr: 1994
Titel: CHRONOLOGIE Künstler: Jean Michel Jarre Jahr: 1994
Warum werden beide Felder mit demselben Objekt überschieben?
Ich würde gerne folgende Ausgabe erreichen und hätte diese auch erwartet:
Titel: Oxygene Künstler: Jean Michel Jarre Jahr: 1972
Titel: CHRONOLOGIE Künstler: Jean Michel Jarre Jahr: 1994
Danke für jede Antwort!
Hier der Code:
Java:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
public class CdListe {
static String archivTitle;
static String cdTitle;
static String kuenstler;
static int jahr;
static Scanner eingabe = new Scanner(System.in);
static int maxAnzahl;
static int maxAnzahlNeu;
static Cd [] liste1 = new Cd [maxAnzahl];
class Cd { // Innere Klasse
public Cd () { // Konstruktor der inneren Klasse
System.out.println("Bitte geben Sie den Namen der Cd ein: ");
InputStreamReader read = new InputStreamReader(System.in);
BufferedReader buff1 = new BufferedReader(read);
try{
cdTitle = buff1.readLine();
}
catch (IOException e){
e.fillInStackTrace();
}
System.out.println("Bitte geben sie den Namen des Künstlers ein: ");
BufferedReader buff2 = new BufferedReader(read);
try{
kuenstler = buff2.readLine();
}
catch (IOException e){
e.fillInStackTrace();
}
System.out.println("Bitte geben Sie das Erscheinungsjahr ein: ");
jahr = eingabe.nextInt();
}
String getArchivTitle(){
return archivTitle;
}
String getCdTitle(){
return cdTitle;
}
String getKuenstler(){
return kuenstler;
}
int getJahr(){
return jahr;
}
}
CdListe (){ // Konstruktor der äußeren Klasse
System.out.println("Bitte geben Sie den Namen der zu erstellenden CdListe ein: ");
InputStreamReader read = new InputStreamReader(System.in);
BufferedReader buff = new BufferedReader(read);
try{
archivTitle = buff.readLine();
}
catch (IOException e){
e.printStackTrace();
}
System.out.println("Bitte geben Sie die Anzahl der Cd's ein die Sie archivieren wollen: ");
maxAnzahl = eingabe.nextInt();
for (int i = 0; i < maxAnzahl; i++) {
CdListe.Cd cd = new Cd();
CdListe.liste1[i] = cd;
}
}
static void cdListeAusgabe(){
for (int i = 0; i < CdListe.liste1.length; i++) {
System.out.printf("Titel: %s Künstler: %s Jahr: %d\n", CdListe.liste1[i].getCdTitle(), CdListe.liste1[i].getKuenstler(), CdListe.liste1[i].getJahr());
}
return;
}
}
Zuletzt bearbeitet von einem Moderator: