Java-Übung
ich bin hier am java lernen und habe hier folgende aufgabe zu lösen:
zu a) lautet meine antwort:
und zu b) so:
meine frage ist nun, ob das so korrekt ist?
wäre super, wenn jemand zeit hat, drüber zu kucken. :-)
grüße, nox
Zitat
wir gehen davon aus, dass objekte, die die schnittstelle comparable implementieren, eine funktion compareTo() besitzen, die einen vergleich zweier objekte erlaubt.
![]()
Java-Quelltext
1 2 3 4 5 6 Public interface comparable{ /** * @return -1 wenn empfängerobjekt < other, +1 wenn > und 0 wenn == */ public int compareTo (Object other); }
die folgende doppelt verkettete liste sei so aufgebaut (repräsentationsvariante), dass die listenelemente stets aufsteigend sortiert sind. die interessanten teile der klasse sehen wie folgt aus:
![]()
Java-Quelltext
1 2 3 4 5 6 7 8 9 10 Public class list{ Private static class Node{ // knotenklasse combarable value; // inhalt eines knoten Node previous; // referenz auf den vorgänger Node next // referenz auf den nachfolger } private Node first; // referenz auf den ersten knoten private Node last; // referenz auf den letzten knoten }
a) schreibe eine methode, die feststellt, ob ein object in der liste enthalten ist und je nach dem true oder false zurückgibt.
b) schreibe eine methode, void insert(comparable x), die das objekt x an der richtigen stelle einfügt.
zu a) lautet meine antwort:
|
|
Java-Quelltext |
1 2 3 4 5 6 |
public boolean contains (object o){ Node p=first; while((p.next != null) || (p.compareTo(o)==0)) p=p.next; return (p!=null); } |
und zu b) so:
|
|
Java-Quelltext |
1 2 3 4 5 6 7 8 9 10 |
public void insert(combarable x){ Node p=first; Node q=(Node)x; while(p.compareTo(q)==-1) p=p.next; q.previous=p; p.next.previous=q; q.next=p.next; p.next=q; } |
meine frage ist nun, ob das so korrekt ist?
wäre super, wenn jemand zeit hat, drüber zu kucken. :-)
grüße, nox
zu a)
du willst die schleife doch so lange durchgehen, wie das element nicht dasselbe ist.
also müsste das imho p.compareTo(o)!=0 heißen. wenn es ==0 ist, dann willst du ja aus der schleife gehen und das element haben.
b) sollte nach schnellem drüberschaun schon passen.
jperl
du willst die schleife doch so lange durchgehen, wie das element nicht dasselbe ist.
also müsste das imho p.compareTo(o)!=0 heißen. wenn es ==0 ist, dann willst du ja aus der schleife gehen und das element haben.
b) sollte nach schnellem drüberschaun schon passen.
jperl
Konfuzius [chinesischer Philosoph (551 - 479 v. Chr.)]
Das Entscheidende am Wissen ist, daß man es beherzigt und anwendet.
Das Entscheidende am Wissen ist, daß man es beherzigt und anwendet.
da hast du recht, das muss ungleich sein.
allerdings muss es auch && verknüpft sein, damit nicht weitergelaufen wird, wenn die objekte gleich sind und dann ggf doch false zurückgegeben wird.
ich habe das nun mal so aufgeschrieben:
welches element von der while schleife wird eigentlich zu erst abgehandelt? !=null oder !=0?
wenn der zweite, dann könnte das 2. return einfach false zurückgeben.
nox
EDIT ach ne, der letzte return wert muss schon so bleiben, weil sonst false zurückgegeben wird, wenn sie gleich sind.
trotzdem interessant, welches argument zu erst ausgewertet wird.
EDIT 2 eigentlich kann dann auch der if-teil weg.
allerdings muss es auch && verknüpft sein, damit nicht weitergelaufen wird, wenn die objekte gleich sind und dann ggf doch false zurückgegeben wird.
ich habe das nun mal so aufgeschrieben:
|
|
Java-Quelltext |
1 2 3 4 5 6 7 8 9 |
public boolean contains (object o){ Node p=first; while(p.next!=null && p.compareTo(o)!=0) if (p.compareTo(o)==0) // 0, wenn gleich return true; else p=p.next; return (p.compareTo(o)==0); } |
welches element von der while schleife wird eigentlich zu erst abgehandelt? !=null oder !=0?
wenn der zweite, dann könnte das 2. return einfach false zurückgeben.
nox
EDIT ach ne, der letzte return wert muss schon so bleiben, weil sonst false zurückgegeben wird, wenn sie gleich sind.
trotzdem interessant, welches argument zu erst ausgewertet wird.
EDIT 2 eigentlich kann dann auch der if-teil weg.
|
|
Java-Quelltext |
1 2 3 4 5 6 |
public boolean contains (object o){ Node p=first; while(p.next!=null && p.compareTo(o)!=0) p=p.next; return (p.compareTo(o)==0); } |
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »noxtiblack« (9. September 2009, 10:23)
Bei A) ist mir aufgefallen:
1. nicht p.next!=null sondern p!=null.
2. wenn p = null ist, wird p.compare(... eine NPE werfen. Also stmt umdrehen
3. wenn die Liste leer ist, wird eine NPE geworfen. Das macht keinen Sinn. Aber wenn o null ist soll eine NPE geworfen werden!
PS: Ein Nerd-Kommentar: compareable beschreibt die "gleichheit", nicht das "selbe". Die erste Aufgabe sollte vermutlich lauten:
schreibe eine methode, die feststellt, ob ein gleiches object in der liste enthalten ist und je nach dem true oder false zurückgibt.
Bei B) ist mir ein Fehler aufgefallen:
Du kannst nicht davon ausgehen das compareable vom Typ Node ist (Zeile 3) ACHTUNG: compareable != Node !!!
Danach hast du auch nur einen einzigen von 4 fällen abgebildet.
du musst 4 Fälle insgesammt abfangen:
1. compareable muss das erste element werden
2. compareable muss das letzte element werden
3. compareable muss zwischen zwei compareables gesetzt werden (hast du gut gelöst).
4. die liste ist leer.
|
|
Java-Quelltext |
1 2 3 4 5 6 |
public boolean contains (object o){ Node p=first; while(p.next!=null && p.compareTo(o)!=0) p=p.next; return (p.compareTo(o)==0); } |
1. nicht p.next!=null sondern p!=null.
2. wenn p = null ist, wird p.compare(... eine NPE werfen. Also stmt umdrehen
3. wenn die Liste leer ist, wird eine NPE geworfen. Das macht keinen Sinn. Aber wenn o null ist soll eine NPE geworfen werden!
|
|
Java-Quelltext |
1 2 3 4 5 6 |
public boolean contains (object o){ Node p=first; while(p!=null && o.compareTo(p.value)!=0) p=p.next; return o.compareTo(p.value)==0; } |
PS: Ein Nerd-Kommentar: compareable beschreibt die "gleichheit", nicht das "selbe". Die erste Aufgabe sollte vermutlich lauten:
schreibe eine methode, die feststellt, ob ein gleiches object in der liste enthalten ist und je nach dem true oder false zurückgibt.
Bei B) ist mir ein Fehler aufgefallen:
Du kannst nicht davon ausgehen das compareable vom Typ Node ist (Zeile 3) ACHTUNG: compareable != Node !!!
Danach hast du auch nur einen einzigen von 4 fällen abgebildet.
du musst 4 Fälle insgesammt abfangen:
1. compareable muss das erste element werden
2. compareable muss das letzte element werden
3. compareable muss zwischen zwei compareables gesetzt werden (hast du gut gelöst).
4. die liste ist leer.
Dieser Beitrag wurde bereits 8 mal editiert, zuletzt von »nocturne« (9. September 2009, 17:34)
Ähnliche Themen
-
Archiv: Software »-
Alles was mit Java zu tun hat funzt nich mehr!
(24. Dezember 2003, 22:19)
-
Allgemeines Forum »-
Steno lernen, aber wie?Online?
(2. November 2003, 17:38)
-
PHP »-
Verschlüsselungen
(3. August 2003, 16:32)
-
(X)HTML & CSS & DHTML & Javascript »-
Javascript funktioniert nicht
(30. Dezember 2002, 07:34)
-
Allgemeines Forum »-
Browser
(13. Dezember 2002, 23:11)


