D
donmugello
Gast
Hallo liebe Community,
ich stecke gerade mitten in einem Programmierpraktikum und habe ein Problem bei einer Aufgabe, auf dessen Lösung ich einfach nicht komme. Ich habe die Aufgabe komplett implementiert, Eclipse zeigt keine Fehler an, aber eine Methode funktioniert beim testen nicht so wie sie soll.
Erstmal zur Aufgabe:
Wir sollen eine Bibliothek erstellen, in der Benutzer und Medien gespeichert werden. Die Benutzer und Medien werden in separaten Klassen erstellt, in einer Klasse Bibliothek zusammengeführt und dort wird mit Ihnen gearbeitet. Die Methode, die bei mir nicht funktioniert, existiert in der Klasse Bibliothek soll aus einem einzeiligen String ein neues Medium herauslesen und erstellen. Hier mal die genaue Aufgabenstellung:
static Medium readMedium(String line)
Liest aus einem einzeiligen String ein neues Medium ein und gibt dies zurück. In diesem String sind jeweils durch Komma getrennt folgenden Informationen enthalten:
Der erste Eintrag gibt stets den Typ des Mediums an, also "CD", "DVD" oder "Buch". Der zweite Eintrag gibt stets die Registriernummer an, der dritte den Titel, der vierte die Information, ob das Medium ausleihbar ist ("true" oder "false"). Bei einem Buch folgen anschlieüend ISBN-Nummer, Autor und Mindestalter, bei einer CD oder DVD die Abspieldauer und das Mindestalter. Ist der übergebene String nicht diesen Anforderungen entsprechend formattiert oder enthült er weitere durch Komma separierte Elemente, so ist eine IllegalArgumenException zu werfen.
Ein korrekter String kann zum Beispiel wie folgt aussehen:
Buch,104,Terry Schotter,true,ISBN:12345,A. Rollin,12
oder:
CD,101,Musik der Stille,true,34,6
Die Medien werden über Unterklassen eingeteilt, in Buch, CD und DVD.
Mein Code für diese Methode sieht folgendermaßen aus:
Mein Problem ist nun, dass wenn ich einen der beiden Beispielstrings einfüge und teste, die Methode dennoch komplett durchläuft und mir eine IllegalArgumentException zurückgibt. Allerdings sollte doch meines Wissens die Methode beendet werden, sobald in einer if-Bediungung ein neues Medium erzeugt und zurückgegeben wurde. Sehe ich da etwas falsch oder habe ich einen Fehler in meinem Code, den ich immer und immer wieder übersehe?
Was evtl noch wichtig ist: meine Methode, ein neues Medium zu erstellen sieht zb für ein buch folgendermaßen aus:
Hat jemand vielleicht einen Tipp für mich, woran es liegen könnte? Für ein bisschen Hilfe wäre ich sehr dankbar.
MfG Thomas
ich stecke gerade mitten in einem Programmierpraktikum und habe ein Problem bei einer Aufgabe, auf dessen Lösung ich einfach nicht komme. Ich habe die Aufgabe komplett implementiert, Eclipse zeigt keine Fehler an, aber eine Methode funktioniert beim testen nicht so wie sie soll.
Erstmal zur Aufgabe:
Wir sollen eine Bibliothek erstellen, in der Benutzer und Medien gespeichert werden. Die Benutzer und Medien werden in separaten Klassen erstellt, in einer Klasse Bibliothek zusammengeführt und dort wird mit Ihnen gearbeitet. Die Methode, die bei mir nicht funktioniert, existiert in der Klasse Bibliothek soll aus einem einzeiligen String ein neues Medium herauslesen und erstellen. Hier mal die genaue Aufgabenstellung:
static Medium readMedium(String line)
Liest aus einem einzeiligen String ein neues Medium ein und gibt dies zurück. In diesem String sind jeweils durch Komma getrennt folgenden Informationen enthalten:
Der erste Eintrag gibt stets den Typ des Mediums an, also "CD", "DVD" oder "Buch". Der zweite Eintrag gibt stets die Registriernummer an, der dritte den Titel, der vierte die Information, ob das Medium ausleihbar ist ("true" oder "false"). Bei einem Buch folgen anschlieüend ISBN-Nummer, Autor und Mindestalter, bei einer CD oder DVD die Abspieldauer und das Mindestalter. Ist der übergebene String nicht diesen Anforderungen entsprechend formattiert oder enthült er weitere durch Komma separierte Elemente, so ist eine IllegalArgumenException zu werfen.
Ein korrekter String kann zum Beispiel wie folgt aussehen:
Buch,104,Terry Schotter,true,ISBN:12345,A. Rollin,12
oder:
CD,101,Musik der Stille,true,34,6
Die Medien werden über Unterklassen eingeteilt, in Buch, CD und DVD.
Mein Code für diese Methode sieht folgendermaßen aus:
Java:
static Medium readMedium(String line) {
int regNr, mindAlt, abspd;
boolean alb;
String[] a = line.split( Pattern.quote( "," ) );
if (a.length < 6 ||a.length > 7)
throw new IllegalArgumentException();
try {
regNr = Integer.parseInt(a[1]);
mindAlt = Integer.parseInt(a[a.length-1]);
alb = Boolean.parseBoolean(a[3]);
} catch (NumberFormatException nfe) {
throw new IllegalArgumentException();
}
if (a[0] == "Buch" && a[4].substring(1,6) == "ISBN:") {
Medium med = new Buch(regNr, a[2], alb, a[4], a[5], mindAlt);
return med;
} else
if (a[0] == "CD" || a[0] == "DVD") {
try {
abspd = Integer.parseInt(a[4]);
} catch (NumberFormatException nfe) {
throw new IllegalArgumentException();
}
if (a[0] == "CD") {
Medium med = new CD(regNr, a[2], alb, abspd, mindAlt);
return med;
}
if (a[0] == "DVD") {
Medium med = new DVD(regNr, a[2], alb, abspd, mindAlt);
return med;
}
} throw new IllegalArgumentException();
}
Mein Problem ist nun, dass wenn ich einen der beiden Beispielstrings einfüge und teste, die Methode dennoch komplett durchläuft und mir eine IllegalArgumentException zurückgibt. Allerdings sollte doch meines Wissens die Methode beendet werden, sobald in einer if-Bediungung ein neues Medium erzeugt und zurückgegeben wurde. Sehe ich da etwas falsch oder habe ich einen Fehler in meinem Code, den ich immer und immer wieder übersehe?
Was evtl noch wichtig ist: meine Methode, ein neues Medium zu erstellen sieht zb für ein buch folgendermaßen aus:
Java:
public Buch(int registernummer, String titel, boolean ausleihbar, String iSBN, String autor, int mindestalter) {
super(registernummer, titel, ausleihbar, mindestalter);
if (titel == null || autor == null || iSBN == null)
throw new NullPointerException();
if (titel == "" || autor == "" || iSBN == "" || registernummer < 0)
throw new IllegalArgumentException();
this.iSBN = iSBN;
this.autor = autor;
}
Hat jemand vielleicht einen Tipp für mich, woran es liegen könnte? Für ein bisschen Hilfe wäre ich sehr dankbar.
MfG Thomas