fb18.de
/ Diplom Informatik
/ Unterbereich Grundstudium
/ Praktische Informatik
P3 BeginOfStudies
Kann mir einer sagen was hier dran falsch ist?
Der Test läuft nicht.
public int compare(Object s, Object t) {
Date i = ((Student) s).getStudienbeginn();
Date j = ((Student) t).getStudienbeginn();
if (i.compareTo(j) == 0) {
return 0;
}
else { if (i.compareTo(j) < 0){
return -1;} else {
return 1; }
}
}
Seit Ewigkeiten kein Java mehr benutzt. Aber normalerweise gibt Eclipse doch immer irngedeine Fehlermeldung aus?
Mal eine Frage: Warum machst du diese Fallabfrage? Würde es nicht reichen, wenn du return i.compareTo(j);
machen würdest?
Jetzt wo ich die Doku lese …
the value 0 if the argument Date is equal to this Date; a value less than 0 if this Date is before the Date argument; and a value greater than 0 if this Date is after the Date argument.
(
http://java.sun.com/j2se/1.4.2/docs/api/java/util/Date.html#compareTo(java.util.Date) )
sollte es einfach so gehen:
public int compare(Object s, Object t) {
Date i = ((Student) s).getStudienbeginn();
Date j = ((Student) t).getStudienbeginn();
return i.compareTo(j);
}
java.util.date.compareTo() liefert dir ja schon das Ergebnis wie Du es brauchst.
Ja schon , aber ich wollte halt dass er dann nicht zum Beispiel 49 ausgibt, sondern einfach 1 und statt -53 einfach -1…
Und wie soll man die PriorityQueue implementieren??
Zwei Klassen Node und PriorityQueue oder nur eine?
Und bei Node was verwendet man da? Das Interface?
Ich versteh das nicht.
Lümmel? Mein Beitrag vor deinem?
Lümmel? Mein Beitrag vor deinem?
Hmmmm ? Als ich angefangen habe meinen Beitrag zu formulieren und Doku gelesen habe gab es noch keinen Beitrag zu diesem Thema…
Ich habs so gemacht wie ihr sagt, aber es ist immer noch ein Fehler drin . keine Ahnung warum
Ja schon , aber ich wollte halt dass er dann nicht zum Beispiel 49 ausgibt, sondern einfach 1 und statt -53 einfach -1…
Gibt CompareTo nicht auch nur 0, 1 oder -1 aus?
Und wie soll man die PriorityQueue implementieren??
Zwei Klassen Node und PriorityQueue oder nur eine?
Und bei Node was verwendet man da? Das Interface?
Ich versteh das nicht.
Also so, wie ich das Verstehe, hält jedes Exemplar der Klasse Node eine Referenz auf ein Exemplar der Klasse Student.
Zudem gibt es eine Refernez auf das nächste Exemplar von Node. Damit bastelst du quasi deinen eigenen Iterator.
Ach ja: PriorityQueue sollte dann irgendwie noch eine Referenz auf das erste Node halten[img]
http://www.fb18.de/gfx/6.gif[/img]
Ja schon , aber ich wollte halt dass er dann nicht zum Beispiel 49 ausgibt, sondern einfach 1 und statt -53 einfach -1…
Gibt CompareTo nicht auch nur 0, 1 oder -1 aus?
Nein, eben nicht[img]
http://www.fb18.de/gfx/10.gif[/img]
compareTo() soll einen Wert kleiner 0, 0 oder einen Wert größer 0 ausgeben. Das
kann natürlich 1, -1 und 0 sein[img]
http://www.fb18.de/gfx/22.gif[/img]
Ich habs so gemacht wie ihr sagt, aber es ist immer noch ein Fehler drin . keine Ahnung warum
was ist denn der Fehler, compilermäßig ja wohl nichts,
also irgendeine assert-Operation?
vielleicht falschrum sortiert?
vollständiger Code?
Gibt CompareTo nicht auch nur 0, 1 oder -1 aus?
in diesem Fall wohl schon ;), in Date siehts so aus:
public int compareTo(Date anotherDate) {
long thisTime = this.getTime();
long anotherTime = anotherDate.getTime();
return (thisTime < anotherTime ? -1 : (thisTime==anotherTime ? 0 : 1));
}
Ja schon , aber ich wollte halt dass er dann nicht zum Beispiel 49 ausgibt, sondern einfach 1 und statt -53 einfach -1…
Ist doch egal, da Du i.d.R. eh >0, <0 und == 0 unterscheidest.
Und wie soll man die PriorityQueue implementieren??
Zwei Klassen Node und PriorityQueue oder nur eine?
Und bei Node was verwendet man da? Das Interface?
Ich versteh das nicht.
Du mußt eine eigene Klasse Node implementieren. In dieser speicherst Du:
Einen Studenten (vom Typ Student aus Aufgabe 1)
Eine Referenz auf die nächste Node
Eine Referenz auf die vorige Node.
In der Klasse PriorityQueue implementierst Du die Schlange an sich (mit den in der Aufgabe angebeben Methoden). In der PriorityQueue speicherst Du dann am besten eine Referenz auf die erste Node.
Z.b. zum Sortieren mußt Du Dich von einer Node zur anderen "durchhangeln" (deswegen gibt es in der Node immer einen Verweis zum Nächsten bzw. vom Letzten)
Unglaublich, aber irgendwie lag es daran, dass ich beiden Studentenobjekten das gleiche Geburtsdatum Date-Objekt zugewiesen hatte.
Das kapier ich gar nicht warum das nicht gehen soll…
@Lümmel: Danke, das mit dem vorherigen Node habe ich doch glatt überlesen[img]
http://www.fb18.de/gfx/22.gif[/img]
Helft mir doch, wie soll man Aufgabe 3 machen? Ich brauch einen Ansatz.
http://vsis-www.informatik.uni-hamburg.de/teaching/ws-03.04/p3/a1.phtml
was verstehst du denn nicht?
Ansatz: Node basteln, danach die Queue
hmmm…
wie realisiere ich denn die 'links' zu den anderen nodes?
habe ich etwa nicht genug aufgepasst in P2?
der Rest muesste einfach sein… hat mal jemand lust an einem open-source project zwecks aufgabenloesen? :)
- VideoSven
Soll man das Interface Node implementieren oder wie baut man die Node?
Ich würde mal sagen, du baust eine Klasse Node, so wie in der Aufgabe beschrieben[img]
http://www.fb18.de/gfx/23.gif[/img]
ungefaehr so: ???
public class Node
{
private object container;
// private linkvor… hier die referenzen realisieren
// und die ueblichen set und get-methoden
}
hat mal jemand lust an einem open-source project zwecks aufgabenloesen? :)
Wenn ihr dabei erwischt werdet (und ihr werdet erwischt werden), dannb kriegen alle Teilnehmer des Projekts keinen Schein. Überlegt es euch also [img]
http://www.fb18.de/gfx/25.gif[/img]
Bewährt hat sich ein CVS für die eigene Arbeitsgruppe kombiniert mit ICQ.
Na das hat er natürlich nicht erst gemeint, dashalb das smilie
ungefaehr so: ???
public class Node
{
private object container;
// private linkvor… hier die referenzen realisieren
// und die ueblichen set und get-methoden
}
ungefähr schon ja
Soll man das Interface Node implementieren oder wie baut man die Node?
falls du das Interface org.w3c.dom.Node meinst:
nein das hat nix damit zu tun,
wie man baut: so wie VideoSeven
Du mußt eine eigene Klasse Node implementieren. In dieser speicherst Du:
Einen Studenten (vom Typ Student aus Aufgabe 1)
Eine Referenz auf die nächste Node
Eine Referenz auf die vorige Node.
Nur einen Studenten??
steht eigentlich irgendwo in der Aufgabe das es um Studenten als Elemente geht? [img]
http://www.fb18.de/gfx/22.gif[/img]
aber sonst klar nur einen,
wenn du einen neuen richtig einordnen willst dann natürlich in der Kette zwischen 2 alten
Was ich meine ist, ob jetzt Node nur genau einen Studenten enthält.
getPredessor holt sich dann ja die vorgänger node mit einem Studenten usw. oder?
mein bestimmter node muss für diese get-Methoden doch auf die Priority Queue zugreifen richtig?
Was ich meine ist, ob jetzt Node nur genau einen Studenten enthält.
Ja
getPredessor holt sich dann ja die vorgänger node mit einem Studenten usw. oder?
mein bestimmter node muss für diese get-Methoden doch auf die Priority Queue zugreifen richtig?
Nein… deine Node ist quasi ein statisches Object ohne eigene Methoden (naja ok… eventuell mit eigenen set und get Methoden). Die gesamte Funktionalität für die Schlange steckt im Queue und nicht im Node!
mein bestimmter node muss für diese get-Methoden doch auf die Priority Queue zugreifen richtig?
ne auf den Link auf vorherigen Node, der ja im Node vorhanden sein soll,
dagegen muss die Queue auf den Node zugreifen,
wenn diese den Vorgänger bestimmen möchte
eine Frage hab ich noch:
Wie kann ich den die referenzen setzen. worauf denn?
Ich weiss doch gar nicht wer vorgänger und so ist.
Wenn du's nicht weisst, ist es halt erstmal null.
Kann mir mal nicht jemand nen tipp geben fuer die 'links' die auf die andern nodes zeigen? in pascal wuerde ich das mit pointern machen, aber in java? fuer nen _echten_ tipp waere ich echt dankbar (Denkblockade) und diese dummen flames koennt ihr euch echt sparen (oder ist dies das orakel von delphi?)
Hm, in meiner letzten P3-Übung wurde das eigentlich gesagt…
Referenzen auf Objekte erstellst du durch Zuweisung. Also:
public Node(Node nextNode,...)
{
_nextNode = nextNode;
.
.
.
}
Ich hoffe, damit habe ich in den scharfen Augen der P3-Ü Leiter nicht zuviel verraten[img]
http://www.fb18.de/gfx/22.gif[/img]
ich glaube es geht eher um die Art der Speicherung
da gibts doch nur eine Art in Java, eine Referenz halt:
Node _nextNode = null;
und wer flamed hier?
null ist halt der Standardwert in Java
So, wie ich ihn verstanden habe, ging's ihm eher darum, wie die Nodes mit einander verkettet sind bzw. Referenzen aufeinander halten…
ich dachte mir folgendes:
die node kriegt folgende Parameter übergeben: PredessorNode, SuccessorNode, aber auch einen Studenten oder?
Weil wie kriegt man sonst einen Studenten in die Node rein?
Danke, Da:Sourcerer
Hat mir geholfen… muss jetzt nur noch das comparatorproblem loesen… und ne schleife :)
hat mal jemand lust an einem open-source project zwecks aufgabenloesen? :)
Wenn ihr dabei erwischt werdet (und ihr werdet erwischt werden), dannb kriegen alle Teilnehmer des Projekts keinen Schein. Überlegt es euch also [img]http://www.fb18.de/gfx/25.gif[/img]
Bewährt hat sich ein CVS für die eigene Arbeitsgruppe kombiniert mit ICQ.
Die Zeiten sind vorangeschritten. Heute kommt noch TeamSpeak dazu :)
MoKrates
die node kriegt folgende Parameter übergeben: PredessorNode, SuccessorNode, aber auch einen Studenten oder?
Weil wie kriegt man sonst einen Studenten in die Node rein?
ja kannst schon so machen,
schadet natürlich auch nicht erst mal einen leeren Node zu erstellen und dann eine
setStudent(studentFuerDiesenNode);
Operation auszuführen,
die Referenzen auf Vorgänger und Nachfolger musst du auf jeden Fall später noch modifizieren können, wenn du einfügst und löschst,
aber das siest man dann ja alles wenn man soweit ist,
das Rad muss sich nicht von Anfang an drehen ;)
Ja, danke jetzt weiss ich erstmal alles!
Bei den Exceptions steig ich nich ganz durch… Die Test-Klasse fuer den PriorityQueue beschwert sich beim Aufruf von remove und getHeadElement das die IllegalAccessException nich gehandelt wird.Muss ich jetze jedesma wenn ich remove aufrufen will da extra try und catch drumsetzen, oder wie? Kann das denn sinn der sache sein?
Und warum beschwert er sich nich bei den Methoden wo NullPointerExceptions und IllegalArgumentExceptions geschmissen werden?
es gibt halt Exceptions und andere Exceptions ;),
die einfachen (alle die von RuntimeException abgeleitet werden)
brauchen nicht abgefangen zu werden, damit man nicht etwa bei jedem
Arrayzugriff try-catch schreiben muss..
http://www.dpunkt.de/java/Die_Sprache_Java/Exceptions/12.htmlwenn remove() so böse ist und das verlangt, dann musst du da wohl durch
so muesste es doch laufen, oder?
- mit bitte um antwort…
public class Node
{
// zensiert, bitte keine Lösungen posten, danke
}
jaja kommt schon hin,
aber bitte nix komplettes zu aktuellen Übungen mehr posten
Ja schon , aber ich wollte halt dass er dann nicht zum Beispiel 49 ausgibt, sondern einfach 1 und statt -53 einfach -1…
Seeehr spät, aber was mir eben noch dazu eingefallen ist: Dafür könnte mand das Ergebnis von compareTo() doch einfach durch die Vorzeichenfunktion jagen, oder?