Überschreiben der clone()-Methode

Miramizu

Mitglied
Huhu

Ich hab eine Frage: Wieso funktioniert meine clone()Methode nicht?

Kennt sich da wer aus?

Es geht hier um eine SLL (Single Linked List) ich poste mal nur die Methode, die anwendung und den laufzeitfehler, wenn das komplette programm nötig ist, bitte bescheid sagen, aber ich denke es ist daraus zu erschließen. die anderen methoden (getters und setters und so) funktionieren alle einwandfrei. und es lässt sich ja auch kompilieren. Viellecht kann mir ja wer helfen hier die Methode:

Java:
@Override
	public SLL clone() {
		Node pointer = top;
		SLL listClone = new SLL();
		Node clone = pointer;
		while (pointer.getNext() != null) {
			pointer = pointer.getNext();
			clone.setNext(pointer);

			if (pointer.getNext() == null) {
				pointer = pointer.getNext();
				clone.setNext(null);
			}

		}

		return listClone;
	}

anwendung:
Java:
System.out.println("KLonen:" + list.clone());

Fehler:

Exception in thread "main" java.lang.NullPointerException
at de.fhalbsig.win.sll.SLL.clone(SLL.java:89)
at SLLApp.main(SLLApp.java:47)


SLLApp Zeile 47 ist die vorher gepostete, also system.out... ... In Zeile 89 steht:
Java:
		while (pointer.getNext() != null) {

Versteht jemand das Problem?

Vielen Dank im Vorraus :)
 

eRaaaa

Top Contributor
Code:
poiner
scheint
Code:
null
zu sein, aber was soll das da überhaupt werden? Du machst mit
Code:
listClone
ja gar nichts oder? ;/


(Ein ziemlich einfacher Trick etwas zu clonen wäre Serializable btw)
 

tfa

Top Contributor
In Zeile 11 setzt du pointer auf null. Beim nächsten Schleifendurchlauf bei pointer.getNext() knallt es dann.
 

Miramizu

Mitglied
doch doch ich will eine kopie einer liste erstellen... die liste ist in der SLLApp bereits erstellt worden, dann geb ich sie aus, setz da was hin, oder dort ein element lösch was und alles funktioniert immer mit dieser while schleife... und jetzt plötzlich nicht.

und ich versteh auch nicht dass ich den auf null setze... ich sitz schon seit heute mittag an dem programm vll bin ich mittlerweile auch blind aber ich verstehe das nicht...

habt ihr ne lösung? oder nen lösungsansatz wie ich das verhindere, dass der auf null geht? soll ich doch die komplette codes (sind drei klassen: SLL, Node und SLLApp) posten?
 

eRaaaa

Top Contributor
und ich versteh auch nicht dass ich den auf null setze...

Java:
     if (pointer.getNext() == null) {
                pointer = pointer.getNext();

Du fragst hier ab ob getNext() null liefert, wenn ja, setzt du pointer auf getNext() (Erinnerung: getNext() ist null) ..die while-Schleife prüft dann wieder ihre Bedingung mit pointer.getNext() und es kracht !
 

tfa

Top Contributor
Hier setzt du pointer auf null:
Java:
if (pointer.getNext() == null) {
                pointer = pointer.getNext();
 ...}

Außerdem machst du wie gesagt nichts mit listClone. Das Objekt wird am Ende einfach so zurück gegeben. Die Schleifen haben überhaupt keinen Einfluss. Außerdem musst du auch die Nodes clonen und in das neue SSL-Objekt setzen.
 

Miramizu

Mitglied
aaah jetzt danke... okay ich hab kapiert dass ich den auf null setze... also gut wenn die schleifen nichts machen sind sie wohl unnötig...

hat denn vielleicht jemand einen anderen lösungsansatz, wie man so ne liste klonen könnte? kann man sich nicht irgendwie mit der get-methode die werte holen und ausgeben? da bräuchte man aber auch wieder ne schleife oder? oder gibts vll eine viel viel einfachere lösung...

hat jemand ne idee?
 

eRaaaa

Top Contributor
Naja an sich haben wir dir ja jetzt schon zwei Varianten aufgezählt.
Man könnte Node + SLL (+ evtl. weitere) Serializable implementieren lassen und dann eben die Liste einfach Serialisieren, Deserialisieren (mit ByteArrayOutputStream z.B.) und zurückgeben oder eben so ähnlich wie du jetzt auch schon gemacht hast, eben Iterieren. Aber du musst dann natürlich wie tfa schon schrieb die Nodes auch klonen, sonst hast du eben keine echte tiefe Kopie und du musst die Nodes natürlich dann der Liste bekannt machen. Im Moment erstellst du ein Listobjekt und gibst das zurück, das ist quasi nackt :)
Wir kennen jetzt deine Listimplementierung nicht, aber wenn du dir z.B. nur den Listanfang merkst, musst du eben den ersten Node in deiner Liste dann setzen. Der Rest ergibt sich ja dann von selbst Node 1 --> Node2 -> usw....
 

Miramizu

Mitglied
Tut mir leid, ich bin doch noch weit mehr am Anfang als ich dachte. Ich hab keine Ahnung was iterieren und serialisierne und serialziable ist. Das klingt extrem kompliziert ich habe keine ahnung, wie ich das jetzt implementieren könnte absolut nicht.

Aber ich geh die Tage zu meinen Java-"nachhilfelehrer" und zeig ihm deine beschreibung, vielleicht kann er das umsetzen. weil ich versteh grad echt nicht wirklich viel davon, und es wäre zuviel verlangt, das jetzt auch noch in anfängersprache umzuwandeln denke ich...

ich schreib hier natürlich wie es gelaufen ist, vielleicht setz ich mich morgen auch noch mal dran. Also das sind die einzigen beiden Varianten?

Schade, dachte eigentlich es geht viel einfacher... Also ohne die Nodes mitzukopieren wie so ein befehl von wegen sll.clone() und es is dann automatisch geklont. also das java selbst so etwas anbietet, hab aber auch nichts in der richtung gefunden :/

Also Vielen Dank mal, ich halt euch auf laufenden ob ichs dann irgendwann schaffe :)
 

eRaaaa

Top Contributor
Naja, du könntest vllt. auch noch ein paar Mehr Informationen geben. Was genau steckt in Node?(eine Referenz auf einen anderen Node, das ist klar, aber vom Inhalt her, Strings? Zahlen? Oder ist das generisch? Wenn da etwas nicht serialisierbares drin stecken soll, fällt diese Variante nämlich natürlich schon einmal raus)
Und vllt. sollst du ja auch gar keine tiefe Kopie liefern sondern wirklich nur eine Flache (dann wäre deine Version ja schon gar nicht so falsch *g*)?? Die verkettete Liste aus dem JDK liefert ja auch nur eine shallow copy!
 

Miramizu

Mitglied
DAS steckt in Node:

Java:
public class Node {
	private int data;
	private Node next;

	public Node() {

	}

	public Node(int data) {
		this.data = data;
	}

	public Node(int data, Node next) {
		this.data = data;
		this.next = next;
	}


und die getters und setters aber die muss ich ja nicht posten, die sind ja klar.

ändert das jetzt was?


EDIT: also is das jetzt serialisierbar?

Und ja ich denk eine flache reicht. es kommt wirklich nur auf die Ausgabe an.

Wenn ich jetzt sag list.print();
soll das gleiche rauskommen wie:
list.clone();

so hab ichs zumindest verstanden... und so will ichs auch machen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
LimDul XSD To Java - Überschreiben von Assoziationen Allgemeine Java-Themen 1
C Überschreiben mit kontravariante Parameter Allgemeine Java-Themen 13
T Überschreiben von Methoden Allgemeine Java-Themen 6
K Überschreiben von Variablen bei rekursivem Funktionsaufruf Allgemeine Java-Themen 2
MQue Spezialfrage Überschreiben von Methoden Allgemeine Java-Themen 14
A OOP: Überschreiben/Implementierung von Methoden Allgemeine Java-Themen 5
T Überschreiben von Methoden erzwingen Allgemeine Java-Themen 20
T Direktes Überschreiben Allgemeine Java-Themen 7
J Überschreiben von Variablen Allgemeine Java-Themen 3
vogella Überschreiben von equals und hashcode für Collection Allgemeine Java-Themen 7
M Überschreiben? Allgemeine Java-Themen 3
A FileChooser Datei-Überschreiben Abfrage Allgemeine Java-Themen 2
K Überschreiben von 'static'-Methoden hat anderes Verhalten? Allgemeine Java-Themen 2
J Methoden clone(), arraycopy(): ein- und zweidimensionale Arrays Allgemeine Java-Themen 8
A deepcopy mit clone() Allgemeine Java-Themen 2
R Gleiche Objektreferenz trotz clone()? Allgemeine Java-Themen 12
P Unterschiedliche Clone- Methoden Allgemeine Java-Themen 5
H Frage zu clone() Allgemeine Java-Themen 5
xehpuk clone() wegen leerem Cloneable quasi nutzlos? Allgemeine Java-Themen 6
G Object mit clone kopieren Allgemeine Java-Themen 21
R Eigenes Objekt - clone() Allgemeine Java-Themen 2
V clone() ? Allgemeine Java-Themen 4
T abstract + clone() = BUMM! Allgemeine Java-Themen 3
J immutable HashMaps und clone() Allgemeine Java-Themen 3
M Gibt es eigentlich einen Standalone-Java-ICQ-clone Allgemeine Java-Themen 19
M clone-methode nicht verfügbar Allgemeine Java-Themen 10
0 Keine clone-Methode für BigDecimal und BigInteger? Allgemeine Java-Themen 3
M Problem mit Generics und clone() Allgemeine Java-Themen 2
K The method clone() from the type Object is not visible. Allgemeine Java-Themen 9
W Hilfe bei Methode Allgemeine Java-Themen 14
Ü Methoden Arrays vergleichen - Methode Allgemeine Java-Themen 1
Simon16 compareTo Methode überschreiben Allgemeine Java-Themen 4
TheSkyRider Methode über DataInputStream "auslösen" Allgemeine Java-Themen 6
M CrudRepository save Methode mocken Allgemeine Java-Themen 6
thor_norsk toString() - Methode Allgemeine Java-Themen 6
A Clean Code: Variable vs. Methode Allgemeine Java-Themen 8
Encera Zweite Main-Methode zuschalten Allgemeine Java-Themen 18
M Optimierung einer Methode (byte-Geraffel) Allgemeine Java-Themen 2
I Hibernate Envers - Aufruf der Methode zum Speichern selbst ausführen oder managen? Allgemeine Java-Themen 0
N rekursion mehrfach eine Methode Öffnen Allgemeine Java-Themen 4
berserkerdq2 Wenn ich eine Methode nur jede 50ms ausführen will, wie mach ich das? Allgemeine Java-Themen 4
berserkerdq2 run-methode eines Threads so programmieren, dass 30x die Sekunde etwas ausgeführt wird. Allgemeine Java-Themen 44
N Schnellste Methode, ein Array durchzugehen? Allgemeine Java-Themen 9
E Methoden abstract static Methode Allgemeine Java-Themen 8
E Eine Methode einer extendeten Klasse deakitivieren Allgemeine Java-Themen 12
F Getter Methode aufrufen funktioniert nicht Allgemeine Java-Themen 1
B In Java Methode mit generic input und output basteln? Allgemeine Java-Themen 4
goldmensch Datentypen Welche Methode hat die bessere Performance? Allgemeine Java-Themen 12
R Lambda Expression in einer Methode execute() aufrufen (execute() ist eine Methode aus dem funktionalen Interface Command) Allgemeine Java-Themen 5
T C++ Methode Übersetzung in Java Allgemeine Java-Themen 3
L Erste Schritte TDD testen einer Methode mit injezierten Services? Allgemeine Java-Themen 12
R @author vor Methode (eclipse) Allgemeine Java-Themen 1
J RotSchwarzBaum: Löschen mittels insert-Methode Allgemeine Java-Themen 20
Y Java Bruttoberechnen + runden Methode Allgemeine Java-Themen 1
R Warum ist die Methode unendlich oft rekursiv? Allgemeine Java-Themen 5
R Methoden Was fehlt mir bzw. muss ich bei der Methode countHarshabNumbers ändern damit ich die Harshad Zahlen im Intervall [51, 79] zählen kann? Allgemeine Java-Themen 19
D ArrayListe delete Methode klappt nicht Allgemeine Java-Themen 12
Drachenbauer Wie finde ich den Aufrufer zu einer Methode, die sich nicht in meinem Projekt befindet? Allgemeine Java-Themen 2
A Ist ein enum hier richtig? Enum toString() Methode. Allgemeine Java-Themen 1
Scream_ilias brute force methode verbessern? Allgemeine Java-Themen 6
Scream_ilias passwort meines pc per brute force methode knacken Allgemeine Java-Themen 4
S static methode im Interface Allgemeine Java-Themen 1
M Konstruktor einer Methode Allgemeine Java-Themen 35
A HashMap Methode "get()"-Problem Allgemeine Java-Themen 28
E Hat der Compiler einen Fehler oder warumbeendet return nicht eine Methode ? Allgemeine Java-Themen 7
T Sinn einer toString Methode Allgemeine Java-Themen 3
T Split() Methode funktioniert nicht?! Allgemeine Java-Themen 11
L Methoden Über Reflections eine Methode mit aufrufen Allgemeine Java-Themen 3
S Kann ich eine Methode schreiben die alle Arten von funktionalen Interfaces akzeptiert..? Allgemeine Java-Themen 21
L ToString-Methode Allgemeine Java-Themen 6
X Datentypen NPE in längerer Methode Allgemeine Java-Themen 12
I Methoden Generics-Methode Allgemeine Java-Themen 3
H Strategy Pattern - changeColor() Methode - input rgd oder hex einlesen Allgemeine Java-Themen 1
T statische Variable und nicht-statische Methode Allgemeine Java-Themen 2
B Aufruf der Methode ergibt eine Exception Allgemeine Java-Themen 13
M Wie kann ich ein int[] Array in einer Methode benutzen? Allgemeine Java-Themen 6
M Wie kann man eine void Methode mit Variablen von zwei verschiedenen Objekten ausführen? Allgemeine Java-Themen 15
F Was ist der Dateityp meines Parameters für die Main Methode. Allgemeine Java-Themen 6
F Variablen Palindromzahl (Probleme mit Methode) Allgemeine Java-Themen 9
B APi methode kurz anhalten Allgemeine Java-Themen 8
P Methode aus anderem Paket aufrufen Allgemeine Java-Themen 1
K ursprüngliche ArrayList ändert sich bei Übergabe in Methode Allgemeine Java-Themen 18
R Rekursive Methode Allgemeine Java-Themen 8
ReinerCoder Methode einer Klasse meldet Fehler "misplaced construct(s)" Allgemeine Java-Themen 13
R Wo ist mein Fehler in der Methode DRINGEND Allgemeine Java-Themen 9
I Collection - contains-Methode überschreiben (anonyme innere Klasse) Allgemeine Java-Themen 4
E RMI NULL-Pointer-Exeception wenn der RMI-Proxy eine Methode deligiert Allgemeine Java-Themen 2
S Methoden Liste soll Methode aus innerer Klasse aufrufen Allgemeine Java-Themen 4
M Methoden Generische Methode für ArrayList Allgemeine Java-Themen 7
D HTTP Aufruf einer Methode aus einem Servlet heraus Allgemeine Java-Themen 0
C Threads Methode verhält sich merkwürdig Allgemeine Java-Themen 18
R rekursive und iterative Methode Allgemeine Java-Themen 3
P Methoden Anwendung der allMatch()-Methode Allgemeine Java-Themen 5
G Programm, das nach abgearbeiteter main Methode weiterläuft Allgemeine Java-Themen 72
D Methoden Methode zum Steinschnitt Allgemeine Java-Themen 2
U OOP Warum kann ich aus meiner Methode keinen String auslesen Allgemeine Java-Themen 4
T Methoden Methode zum durchsuchen einer ArrayList Allgemeine Java-Themen 8
D Returnwert aus einer Methode gerundet ausgeben lassen Allgemeine Java-Themen 2
S equals-Methode bestimmer Klassen abfangen Allgemeine Java-Themen 2
H Methoden Methode 'updateItem' der Klasse 'TreeCell' Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben