Array nicht überschreiben?

Status
Nicht offen für weitere Antworten.

mobile

Bekanntes Mitglied
Hi, habe ebend schon mal einen ähnlichen Thread geschrieben. Habe das Problem nun selber hinbekommen. Nun sitze ich aber schon lange an dem nächsten. Und zwar:

Ich habe diese Methode (fast gleich wie vorher auch):

Code:
//...
try {
	    	for(byte i = 0; i < MAX_TRACK; i++) {
	    		System.out.println("Track   : " + (i + 1));
			     
			    System.out.print("Interpret: ");
			    this.interpret = din.readLine();
			     
			    System.out.print("Titel    : ");
			    this.titel = din.readLine();
			     
			    System.out.print("Dauer    : ");
			    this.dauer = din.readLine();
			     
			    System.out.println();
			     
			    md[md_nr - 1][i] = this; 
	    	}
	    }
//....

Möchte damit, eine Track Liste erstellen wie ihr sie alle von einer CD kennt. Die Ausgabe soll mal so aussehen

Mini Disc Nr. 1

Track: 1
Interpret: blablabl
Titel: bluppblupp
Dauer: 3:34

Track: 2
Interpret: anderer wie bei 1
Titel: so und so
Dauer: 2:45

usw. Jetzt lese ich ja die Daten als String oben ein, bis auf die Tracknr. und MiniDiscnr. Eingeben und Ausgeben funktioniert alles schon wunderbar. Aber wenn ich jetzt zb. bei Track 2 was anderes eingebe als bei Track 1, gibt mein Programm immer nur das zuletzt eingegebene aus. Habe es mal auf 2 Tracks beschränkt. Bekomme also 2 mal den 2. Track ausgegeben und nicht den ersten.

Wie bekomme ich es denn hin, dass zu jeder Tracknr. auch verschiedene Strings gepspeichert werden können?

Hoffe ihr versteht mein Problem und könnt mir helfen! Danke!
 
Na ihr kennt doch eine ganz normale Liste auf einer CD Hülle. Oder?

So will ich das abspeichern.

Cd nr 1. Unter 1 will ich nun 20 Titel mit Interpreten, und Dauer speichern. das ist alles!
 
Dann mach dir eine Klasse CD, und irgendeine Klasse die 20 CD Objekte erstellt und speichert.
Wo liegt denn genau dein Problem?
edit:
Sorry, du hast ja Tracks geschrieben...
Also eine Klasse CD mit einer Liste von Track Objekten zum Beispiel.
 
Also: Deine Fragestellung ist nicht besonders gut, aber immerhin habe ich diesmal eine ungefähre Vorstellung, was du eigentlich machen willst... Generell gilt: Lieber zuviel als zuwenig Code, vor allem aber die Deklarationen aller verwendeten Veriablen und zumindest eine Beschreibung der Klassen (lieber aber deren Code) mitliefern!

Zu deinem Problem: Meine Glaskugel sagt, dein Code befindet sich in einer Klasse MiniDisc. Dein Vorhaben ist es ein zweidimensionales Array anzulegen, das für alle MiniDiscs alle Tracks enthält. Dafür liest du die Trackinformationen aus einer Datei o. ä. ein, speicherst die Einzelinformationen in Instanzvariablen wie titel, beschreibung, dauer etc und fügst anschließend diese Trackinformationen in das Array ein, in der Hoffnung, diese würden "per Magie" kopiert.

Was sie natürlich nicht werden. Stattdessen speicherst du Referenzen auf ein Value Object (die Klasse MiniDisc) ab, wobei die Instanzvariablen von MiniDisc jedesmal überschrieben werden, wenn du einen neuen Datensatz liest. Soweit verständlich?

Mach folgendes: Erstelle eine Klasse Track:

Code:
class Track {
    public String titel;
    public String interpret;
    public double dauer;
}

Nun nimm deinen Code her und tue folgendes:

Code:
try {
          for(byte i = 0; i < MAX_TRACK; i++) {
             Track track = new Track();
             System.out.println("Track   : " + (i + 1));
              
             System.out.print("Interpret: ");
             track.interpret = din.readLine();
              
             System.out.print("Titel    : ");
             track.titel = din.readLine();
              
             System.out.print("Dauer    : ");
             track.dauer = din.readLine();
              
             System.out.println();
              
             md[md_nr - 1][i] = track;
          }
       }
//....

Bedenke dabei, das obiger Code auf das Wesentliche reduziert ist (Setter/Getter fehlen), im Produktiveinsatz also verbessert werden sollte. Vor allem aber: Ich kenne dein Programm nicht, vielleicht passt die Lösung auch gar nicht in dein Design.

mpG
Tobias

P.S.: Ich habe keinen Beitrag in diesem Thread gelesen, der jünger ist als 23:50 Uhr. Wildcard sagt dir natürlich dasselbe wie ich. Nur kürzer und netter 😉.
 
Also Klasse CD hätte dann die Attribute int nr, int track nr, String interpret, String titel, und string dauer. richtig?

So die lese ich dann ein. Und speicher jedes einzelln ab oder wie? also muss ich jedesmal ein neues Objekt der Klasse CD erstellen um einen neuen Track zu speichern?
 
Versuch erstmal etwas Ordnung reinzubringen:
Du brauchst 3 Klassen
-CD
-Track
-Eine Klasse mit der du CDs und deren Tracks einlesen kannst

Überleg dir welche Attribute ein Track braucht, und welche eine CD.
Dann erst schreibst du das Einlesen.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben