Die Angabe zum 2. Mustertest ist online!
Fragen zum 2. Mustertest bitte nur hier stellen.
Link zum Thread über den 1. Mustertest:
http://www.informatik-forum.at/showt...stertestangabe
Die Angabe zum 2. Mustertest ist online!
Fragen zum 2. Mustertest bitte nur hier stellen.
Link zum Thread über den 1. Mustertest:
http://www.informatik-forum.at/showt...stertestangabe
Für meine Aussagen gilt: Nichts hineininterpretieren, was nicht da steht
Programmierpraxis Tutor
das is ne fangfrage oda? ^^Code:/** * Fügt eine Playlist unter dem durch name bestimmten * Namen zur Bibliothek hinzu. Falls bereits eine * Playlist mit dem Namen existiert, soll die bestehende * durch die neue (durch playlist angegebene) Playlist * ersetzt werden. * * @param name Der Name, unter dem die * Playlist hinzugefügt werden soll * @param playlist Die Playlist, welche * hinzugefügt werden soll */ public void addPlaylist(String name, Playlist playlist) {
Warum ist das eine Fangfrage?
Das ist der Tipp, dass sich eine Hashmap als Datenstruktur eignet![]()
Für meine Aussagen gilt: Nichts hineininterpretieren, was nicht da steht
Programmierpraxis Tutor
weils keine dummen fragen gibt..:
weiß wer wie die im repetitorium gezeigte methode:
wirklich ausgesehn hat bzw kann mir wer erklären was es mit dem this.() auf sich hat?Code:public Playlist(Playlist playlist1, Playlist playlist2) { //ab hier erinner ich mich leider nicht mehr genau.. this(playlist1); for(Song s : playlist1){ playlist.addSong(s); } this(playlist2); for(Song s : playlist2){ playlist.addSong(s); } }
Du rufst damit den Kopierkonstruktor auf.
this bezieht sich auf die Instanz von Playlist, in der du dich gerade befindest.Code:public Playlist(Playlist original)
Für meine Aussagen gilt: Nichts hineininterpretieren, was nicht da steht
Programmierpraxis Tutor
ajaaaa... *auf den kopf greif*
danke.![]()
Warum funktioniert dies als Kopierkonstruktor nicht irgendwie hänge ich grad komplett
public Playlist(Playlist original) {
playlist =new ArrayList<Song>();
for(Song s : original){
playlist.addSong(s);
}
}
Was funktioniert daran nicht?
Wenn du den Aufruf von oben meinst: Du erzeugst eine neue Playlist, daher sind immer nur die Songs aus original enthalten.
Für meine Aussagen gilt: Nichts hineininterpretieren, was nicht da steht
Programmierpraxis Tutor
Wenn ich es über die Konsole aufrufe kommt die fehler meldung " foreach not applicable to expression type"
"All through my life I've had this strange unaccountable feeling that something was going on in the world, something big, even sinister, and no one would tell me what it was."
"No," said the old man, "that's just perfectly normal paranoia. Everyone in the Universe has that."
😁😂😃😄😅😆😇😈😉😊😋😌😍😎😏😐😒😓😔😖😘😚😜😞😠😡😢😣😥😨😩😪😫😭😰😱😲😳😵😶😷
Oh, hups
Natürlich:
for (Song s: original.playlist)
Für meine Aussagen gilt: Nichts hineininterpretieren, was nicht da steht
Programmierpraxis Tutor
Ok danke![]()
denselben fehler bekomm ich auch.. vlt ist der copy-konstruktor den ich dir geschickt hab doch nicht ganz richtig. :/
edit: zu langsam^^
Sehe ich das richtig das ein Playlist dann einfach eine HashMap ist und wir halt die "getHashCode()" des songs so umschreiben müssen das alle eigenschaften drin vorkommen da ein song ja keine eindeutig identifizierende hat?.Mehrere Songs können zu einer Playlist (Playlist) zusammengefasst werden. Eine
Playlist hat eine bestimmte Reihenfolge, ein Song darf jedoch nur einmal in der Playlist
enthalten sein.
Eine dumme frage hab ich noch. Eine Plalist soll an ihrem Namen identifiziert werden aber weder in den Testfällen noch in dem Codegerüst ist ein Name vorhanden wo sollen wir den jetzt einbauen oder sollen wir einen namen generieren?
Schau dir mal Testfall 4 und 5 genauer an![]()
Für meine Aussagen gilt: Nichts hineininterpretieren, was nicht da steht
Programmierpraxis Tutor
"All through my life I've had this strange unaccountable feeling that something was going on in the world, something big, even sinister, and no one would tell me what it was."
"No," said the old man, "that's just perfectly normal paranoia. Everyone in the Universe has that."
😁😂😃😄😅😆😇😈😉😊😋😌😍😎😏😐😒😓😔😖😘😚😜😞😠😡😢😣😥😨😩😪😫😭😰😱😲😳😵😶😷
Gibt es irgendwo die Folien von Donnerstag letzter Woche bezgl. HasMaps und Listen ?
Ich hatte zum Zeitpunkt der Vorlesung FM Abgabegespräch
Oder irgendeine Seite wo ich das nachlesen kann
Hallo,
Songs und Playlist funktioniert ansich, aber ich habe ein seltsames Problem bei extractPlaylistByArtist
Ich muss ja eine Playlist zurückgeben, also hab ich eine Playlist newplaylist= new Playlist(); angelegt, stimmt das so???Code:public Playlist extractPlaylistByArtist(String artist) { Playlist newplaylist= new Playlist(); System.out.println(artist); for (int x = 0; x < this.playlist.size(); x++) { System.out.println(this.playlist.get(x).getArtist()); if (this.playlist.get(x).getArtist().equals(artist)) { System.out.println("gleich") } } return newplaylist; }
Wenn ich das nun ausführe, so wird nur der System.out.println(artist); ausgeführt und die for schleife gar nicht.
Wenn ich das Playlist newplaylist= new Playlist(); lösche oder runter schiebe unter die for Schleife, wird es ausgeführt, ausgegeben und alle gleichen mit "gleich" markiert. Ich wollte die Playlist VORHER erstellen und dann die gleiche adden (statt gleich auszugeben (zum testen)).
Was mach ich hier falsch???
Ansonsten funktioniert Testfall 1 + 2 + 3 bis zu dem Zeitpunkt mit dem extractPlaylistByArtist normal.
Wäre für Tipps oder Hinweise dankbar.
Suche alte Computer der Marken Commodore, Amiga und Atari!
http://openbook.galileocomputing.de/javainsel/javainsel_13_002.html#dodtp5e6355b5-c483-4ca9-92f6-7bb32314150d
http://openbook.galileocomputing.de/javainsel/javainsel_13_004.html#dodtpa0fe5e88-64cd-4e41-9c55-fb9fd98e0b0c
gute lektüre, bündig und informativ
@0727384 post mal bitte deine methode ohne den prints, sondern so wie sie gehören sollte, dann kann ich dir vlt sagen was du falsch machst
du musst natürlich den song zur neuen playlist hinzufügen, wenn der artist passt...
btw, wenn man den index nicht braucht, ist eine foreach-schleife fast immer eleganter:
edit: zum testen wäre es vielleicht gut, wenn du die playlists auch ausgibst...Code:for (Song s : playlist) { // do your stuff }
frage: playlist ist nicht zufällig static?
Last edited by sutupud; 28-11-2011 at 22:04.
"All through my life I've had this strange unaccountable feeling that something was going on in the world, something big, even sinister, and no one would tell me what it was."
"No," said the old man, "that's just perfectly normal paranoia. Everyone in the Universe has that."
😁😂😃😄😅😆😇😈😉😊😋😌😍😎😏😐😒😓😔😖😘😚😜😞😠😡😢😣😥😨😩😪😫😭😰😱😲😳😵😶😷
OK, ist wohl ein Fehler von mir wo anders, playlist ist wirklich static da mir sonst eine NullPointerException kam/kommt. Das muss ich mir noch ansehen, was da los ist
danke trotzdem
Suche alte Computer der Marken Commodore, Amiga und Atari!
schwierig ohne deine implementierung zu kennen...
sollte jedenfalls so ähnnlich aussehen:
PHP Code:@Override
public boolean equals(Object other) {
if (other == null || !(other instanceof Song)) {
return false;
} else {
Song s = (Song)other;
return s.getArtist().equals(artist) && s.getTitle().equals(title) && s.getDuration() == duration;
}
}
"All through my life I've had this strange unaccountable feeling that something was going on in the world, something big, even sinister, and no one would tell me what it was."
"No," said the old man, "that's just perfectly normal paranoia. Everyone in the Universe has that."
😁😂😃😄😅😆😇😈😉😊😋😌😍😎😏😐😒😓😔😖😘😚😜😞😠😡😢😣😥😨😩😪😫😭😰😱😲😳😵😶😷
So alles gelöst bis auf ein Problem mit public Library(Library libraryToImport, String[] listOfNames)
ich durchlaufe die HashMap mit
for (Map.Entry e : libraryToImport.lib.entrySet()) {
und möchte dann die passenden (also in der Array listOfNames vorgegebenen) Dinge hinzufügen zur Library.
Dachte so irgendwie:
addPlaylist(e.getKey (), e.getValue());
Aber leider ist dann e.getValue () ein String und keine Playlist?
Wie kann ich denn die Playlist dann hier ansprechen?
Danke im Voraus, tu mir da zeitweise schwer
@ TUTOR / LVA:
Wieso (oder wo?) gibts die Muster - Lösungen? Wär schon praktisch bzw. hilfreich. Zumindest kurz vor dem Test (damit man es auch selbst implementiert und nicht gleich aufgibt und nachsieht).
@ FORUM / BETREIBER:
Hatte ein Smilie am Ende des Beitrages und nach dem Edit konnte ich nur VOR den Smilie schreiben, aber nicht nachher den Cursor platzieren (weder mit Maus noch mit Tastatur), ist wohl ein Bug? Das hier ist aber grad IE8Später mal testen wie es im FF aussieht.
Last edited by 0727384; 29-11-2011 at 02:17.
Suche alte Computer der Marken Commodore, Amiga und Atari!
@sutupud Vielen Dank für den Antwort. Ich habe mit Object_Name(z.B Person, Interval etc.) als Parameter implementiert, nicht Object.
Oh, danke @ Neveragain.
Ich habe allerdings
addPlaylist (s, new Playlist (libraryToImport.getPlaylist(s)));
schreiben müssen, damit es klappt (also getPlaylist() statt playlists.get).
Danke, nun klappts
Suche alte Computer der Marken Commodore, Amiga und Atari!
Das hängt davon ab, wie du es implementiert hast.
libraryToImport.playlists.get(s) sollte genauso funktionieren, wenn playlists deine HashMap ist.
Ich habe die Angabe gerade nicht vor mir, aber wenn es eine Methode getPlaylist(s) gibt, dann kann natürlich auch die verwendet werden.
Für meine Aussagen gilt: Nichts hineininterpretieren, was nicht da steht
Programmierpraxis Tutor
OK, danke. Hast recht, funktioniert auch so wie du beschrieben hast.
Suche alte Computer der Marken Commodore, Amiga und Atari!
Bei mir kommt eine Fehlermeldung, wenn ich addSong verwende, mit add() funktionierts. Habe ich irgendwas falsch oder ist add auch ok?
Und den Kopierkonstruktor aus Post #5 verstehe ich auch nicht ganz, wahrscheinlich ist es ganz einfach, aber blick mich grad nicht durch :-( Mit this(playlist1) werden ja alle Songs aus der Playlist 1 in die Playlist übertragen, wenn ich das richtig verstanden habe? Aber wie kopiere ich dann die Playlist 2? Nochmal this kann ich nicht aufrufen, da kommt mir eine Fehlermeldung. Wieder mit einer for-Schleife oder gibt es eine andere Möglichkeit?
Bei der zweiten Theoriefrage, ist es da nötig die Variablen final zu machen? Denn wenn bei der Addition der Vektor nicht mehr verändert werden würde, gäbe es eh keine Möglichkeit mehr, den Vektor zu ändern.
Ja, die müssen final sein, bloß funktioniert die Addition dann so nicht mehr![]()
Last edited by Neveragain; 19-12-2011 at 20:37. Reason: Formulierung verbessert
Für meine Aussagen gilt: Nichts hineininterpretieren, was nicht da steht
Programmierpraxis Tutor
Würde das als Lösung zählen? So ist es zumindest für mich am sinnvollstenCode:private final double x; private final double y; public Vector add(Vector v) {double i = this.x + v.x;double j = this.y + v.y;return new Vector(i,j);} Vector v = new Vector(3,4); v = v.add(new Vector(2,2)); System.out.println(v);![]()
Jedes mal der gleiche Mist, am Anfang läuft es total gut und dann kommt irgendwo drinnen auf einmal ein blöder Fehler der mich Stunden kostet.
Fazit: in 70 Minuten nicht schaffbar. Hab die Theorie noch nicht angefangen, arbeite jetzt seit 40 Minuten dran und werd noch mindestens ne Stunde für Fehlerbehandlung brauchen ehe ich auch nur mit Library anfangen kann -.- (und das nur, weil ich eine blöde Methode nicht hinkriege, nämlich public Playlist(Playlist playlist1, Playlist playlist2) der Rest funktioniert ordnungsgemäß)
Die Zeit ist der größte Feind eines Programmieranfängers wie mir![]()
Last edited by Vendredi; 10-03-2012 at 16:12.
while(vendredi.isPresent()) {
bullshitlevel++;}
Real programmers don't document. If it was hard to write, it should be hard to understand.
There are 10 types of people. Those who understand binary and those who don't.
Was ist genau dein Problem mit dieser einen Methode?
Simpel gelöst:
Code:this(playlist1); for (Song s: playlist2.list) addSong(s);
Für meine Aussagen gilt: Nichts hineininterpretieren, was nicht da steht
Programmierpraxis Tutor
Gut, dann hat die Fehlereingrenzung nicht geklappt. Fehler ist anscheinend schon in der Methode Playlist(Playlist original).
Wenn ich genau diesen Testfall wo darauf zugegriffen werde ausgrenze, klappt nämlich alles.
Sitz jetzt 55 Minuten dran, den Test am Dienstag kann ich knicken.
while(vendredi.isPresent()) {
bullshitlevel++;}
Real programmers don't document. If it was hard to write, it should be hard to understand.
There are 10 types of people. Those who understand binary and those who don't.
while(vendredi.isPresent()) {
bullshitlevel++;}
Real programmers don't document. If it was hard to write, it should be hard to understand.
There are 10 types of people. Those who understand binary and those who don't.
Für meine Aussagen gilt: Nichts hineininterpretieren, was nicht da steht
Programmierpraxis Tutor
while(vendredi.isPresent()) {
bullshitlevel++;}
Real programmers don't document. If it was hard to write, it should be hard to understand.
There are 10 types of people. Those who understand binary and those who don't.
Also doch das was ich dachte![]()
Für meine Aussagen gilt: Nichts hineininterpretieren, was nicht da steht
Programmierpraxis Tutor
/edit: Hat sich erledigt es geht!!!
Last edited by manipuppee; 14-04-2012 at 22:08.
Am Montag hat es doch noch nie ein Repetitorium gegeben. Vor dem Test gibt es nur diese Q&A-Stunde.
https://pk.inflab.tuwien.ac.at/pp/uebung/tutorien/
Studentin? Nein, Versuchskaninchen!
ich meinte natürlich das tutorium zu den tests.
meine extractbyartist methode macht nicht was sie soll, also das programm überspringt die foreach schleife
EDIT: meine fresseCode:public Playlist extractPlaylistByArtist(String artist) { // FILL IN Playlist extractBy = new Playlist(); for(Song s : extractBy.playlist) { if(s.artist.equals(artist)) addSong(s); } return extractBy; }problem gelöst
also ich hätte jetzt testfall 1 fertig
wenn ich nun Jukebox.java ausführe
terminiert er mir sofort das ganze ohne ein ergebnis zu liefern
muss ich in Jukebox was ändern??
ps: ich arbeite mit eclipse
wie kann ich nun testfall 1 aufrufen?
edit: Hier stand Blödsinn.
(Hab für den Test keine IDE verwendet.)
Mein Tipp wäre in dem Fall als Alternativlösung einfach mit der Konsole in den Ordner manövrieren und die Testfälle mit "java Jukebox x" aufzurufen.
Ist zwar nur ein Workaround aber zur Not...
Last edited by Vendredi; 06-05-2012 at 10:12.
while(vendredi.isPresent()) {
bullshitlevel++;}
Real programmers don't document. If it was hard to write, it should be hard to understand.
There are 10 types of people. Those who understand binary and those who don't.
Vorweg der übliche Hinweis, dass das Arbeiten mit Eclipse für Anfänger nicht ratsam ist.
Ansonsten wird der jeweilige Testfall deinem Programm als Argument beim Start übergeben. Ein solches kannst du in Eclipse unter Run/Run Configurations im Reiter Arguments setzen (kann sein, dass dein Eclipse eingedeutscht ist, ka.). Dort wäre dann einfach "1" einzutragen.
Liebe Grüße,
emptyvi
"Die über den Iterator zugänglichen assoziierten Objekte entsprechen Iteratoren des Typs AssocIter, welche (so wie hier für den Wurzelknoten beschrieben) über die Label der Kanten iterieren, die von dem Knoten ausgehen, der über die Kante erreichbar ist, dessen Label zuletzt von next zurückgegeben wurde."
thx an beide vorposter, hat beides geklappt
2 neue fragen
am Ende der Playlist Klasse, soll ich die to-String Methode schreiben
was auch nicht allzuschwer war, jedoch die "GesamtMinuten" ? Soll ich da eine eigene Methode dafür schreiben?
ich arbeite in der ganzen Klasse nur mit Arraylists
tipps tricks hinweise?
Einfach in der Schleife wo du die Songdaten rausliest die Dauer eines jeden Songs zu einer Summenvariable addieren.
Für meine Aussagen gilt: Nichts hineininterpretieren, was nicht da steht
Programmierpraxis Tutor
ich lese die einzelnen Songdate in der to-stringmethode aus der Arraylist mittels Iterator ab
wie sollte man da gezielt auf die duration kommen? oder meinst du ich soll die gesamt zeit schon in der klasse songs berechnen
Du gehst in deiner toString() Methode in der Playlistdie ArrayList mittels Iterator durch (nachdem du den eh schon benützt ^^). Du holst dir die Referenz vom Iterator (zum Beispiel: Song song = it.next()). Dann kannst du mit song.toString() deine Songdaten bekommen, und mit song.getDuration() die jeweilige Dauer (die du nur noch aufsummieren musst).
Liebe Grüße,
emptyvi
"Die über den Iterator zugänglichen assoziierten Objekte entsprechen Iteratoren des Typs AssocIter, welche (so wie hier für den Wurzelknoten beschrieben) über die Label der Kanten iterieren, die von dem Knoten ausgehen, der über die Kante erreichbar ist, dessen Label zuletzt von next zurückgegeben wurde."
dankee (: auf euch kann man sich verlassen als java noob
Ich komm einfach bei der public Library(Library libraryToImport, String[] listOfNames) {
Methode nicht mehr weiter. Ich weiß zwar dass ich mit ner HashMap arbeiten soll, jedoch weiß ich nicht, wie ich die Playlists aus "libraryToImport" rausnehmen und zeitgleich mit deren namen in die HM einfügen soll
also ich würde für alle strings im array listofnames die methode librarytoimport.getplaylist aufrufen, falls diese != null ist playlist zu eigener lib hinzufügen....
Wie schaut bei euch die getPlayList Methode aus-
ich erstelle eine neue Playlist, nur wie vergleicht man und filtert aus der "libraryToImportEntry" die playlist raus?
um die hashmap zu erstellen brauch ich doch ne hashmap .....
hashception -.-
library.get(name)... library ist hier die hashmap (key=string, value=playlist)
durchs aufrufen bekommst du nun von der library die playlist...
jetzt musst du in diese library kopie von dieser playlist (mit dem vorher implementierten kopierkonstruktor) hinzufügen...
also quasi:
Playlist tmp = libtoimport.getPlaylist(string..blabla);
addPlaylist(stringblablaba, newPlaylist(tmp));
ne kurze Frage: warum muss ich die equal()-Methode überschreiben? Denn Song erbt ja sowieso von Object und Object implementiert ja equal() als Vergleich der Identitäten, was ja gebraucht wird. Bei mir hätten alle Testfälle funktioniert.
@jimbo thx, jetzt funzt alles perfekt![]()
Ich dachte auch so. Schon kontrolliert. Nicht so..
Besser wäre vielleicht noch mal zu speichern :Q
Nachdem dein Screenshot abgeschnitten ist, kann ich nur mutmaßen, dass du dort "JukeBox" stehen hast statt "Jukebox".
edit: Da sollte vermutlich Jukebox und nicht JukeBox stehen - bin gerade in der Arbeit und kann nicht nachsehen.
Last edited by Neveragain; 07-05-2012 at 10:23.
Für meine Aussagen gilt: Nichts hineininterpretieren, was nicht da steht
Programmierpraxis Tutor
Es müsste schon funktionieren. Muss nicht nur Class Name und Kompilieren Name gleich sein.? Ich verwende sowieso nicht otherwhere Name "Jukebox".
Aber schon die Datei wurde geändert :Q Jetzt kommt nicht dieser Fehler. Aber gibts kein Ausgabe
Muss ich nur in der "testing()" Methode aufrufen und mit System.out ausgeben, was ich in anderen Klassen gescherieben hab..?
Ich konnte mir jetzt nicht jede Frage/Antwort durchlesen... würd nur durcheinander kommen.
Frage: Kann mir einer sagen warum ich dauernd "incompatible types" bekomme beim foreach?
edit: war zu blöd um die ArrayList richtig zu schreiben und hatte "object vs Song" als types.. was natürlich schwachsinnig ist.
lg
Last edited by Salmir; 07-05-2012 at 18:10.
Die Ewigkeit dauert verdammt lange, vorallem gegen Ende
Beim Kopieren von der Klasse "Library" erlebe ich Folgendes Problem: Ich habe beim Kopieren folgende Methode erstellt:
public Library(Library libraryToImport, String[] listOfNames) {
for(String names: listOfNames) {
String st=names;
Playlist p3=libraryToImport.getPlaylist(st);
addPlaylist(st,new Playlist(p3));
}
}
Aber es kommt immer noch einen Nullpointer Exception heraus. Kann mir bitte jemand helfen?
Danke im Voraus
Bookmarks