Überprüfung einer Aufgabe zu verketteten Listen

townandroid

Mitglied
Hallo,

ich bin gerade dabei, ein paar Aufgaben vor der Klausur (Programmierung I) zu lösen und wollte fragen, ob ihr mich bei meinen Lösungen auf Fehler hinweisen könntet.
Ich könnte eigentlich auch eine Liste erstellen und dann ein wenig rumtesten, aber dabei könnte ich ja etwas übersehen, also wäre es sehr nett, wenn ihr schnell einen Blick drüberwerfen könntet.:)

Also die Aufgabe lautet:
Implementieren Sie eine doppelt verkettete Liste mittels der Klassen Node und List. Die Liste soll Objekte vom Typ String speichern und folgende Methoden besitzen.

1. public void display(): gibt die gesamte Liste (d.h., den Inhalt aller Knoten) beginnend mit dem ersten Knoten auf der Konsole aus.

2. public void add(int i, String content): fügt den übergebenen String an Position i in die Liste ein.

3. public void remove(int pos): löscht das Element an Stelle i aus der Liste.

Zuerst die Klasse Node.
Da die Knoten ja doppelt verknüpft sein müssen, einmal prev und einmal next.
Dann habe ich noch die Methode toString() neu geschrieben, sodass ich den Inhalt der Knoten ausgeben kann und ich habe noch Getter und Setter für prev und next eingefügt.

Java:
public class Node {
	
	String data;
	Node next;
	Node prev;
	
	Node(String data) {
		
		this.data = data;
		next = null;
		prev = null;
	}
	
	public String toString() {
		
		return "{" + data + "} ";
	}
	
	public void setNextNode(Node n) {
		this.next = n;
	}
	
	public Node getNextNode() {
		return next;
	}
	
	public void setPrevNode(Node n) {
		this.prev = n;
	}
	
	public Node getPrevNode() {
		return prev;
	}

}


Und die Klasse List.
Diese braucht ja einmal Zugriff auf den Anfang und auf das Ende.

Java:
public class List {
	
	Node front;
	Node rear;
	
	List(Node a, Node b) {
		this.front = a;
		this.rear = b;
	}
	
	public boolean isEmpty() {
		return front == null;
	}


Die erste Methode.
Wenn die Liste leer ist, wird das mitgeteilt und ansonsten sollte das so passen.

Java:
public void display() {
		
		if(front == null) {
			System.out.println("The list is empty");
		} else {
			
			
			for (Node it = front; it != null; it = it.next) {
				System.out.println(it);
			}
		}
	}


Dann die zweite Methode.
Hier frage ich mich, wenn die Liste leer ist, gibt es dann eine nullte Position? In dem Fall zeigen dann front und rear auf den selben Knoten
Ansonsten wird durchgelaufen und der Knoten eingefügt.
Und hier noch eine Frage, der letzte Knoten hat ja eine Nullpointer-Referenz, zählt diese auch als Position?
Wenn ja, würde ich sie aber auch nicht erreichen, weil ja nur die aktuelle Position abgefragt wird.

Java:
public void add(int i, String content) {
		if(front == null && i == 0) {         
			Node newNode = new Node(content); 
			front = newNode;
			rear = newNode;
		} else {
			Node it = front;
			int actPos;
			for (actPos = 0; it != null && actPos <i; actPos++) {
				it = it.next;
			}
			if(actPos == i) {
				Node newNode = new Node(content);
				newNode = it;
				it.prev = newNode;
				
			} else {
				System.out.println("There is no positon" + i + " in this list");
			}
		  
		}
	}


Und die letzte Methode.
Hier wird ja dann einfach der Knoten gelöscht, ich hoffe das passt.

Java:
public void remove(int pos) {
		
		if(front == null) {
			System.out.println("There is no position" + pos + " in this list");
		} else {
			
			Node it = front;
			int actPos;
			for (actPos = 0; actPos < pos && it != null; actPos++ ) {
				
				it = it.next;
			}
			if(actPos == pos) {
				rear = it.prev;
				it.prev.next = null;
			}
				
		}
		
	}

}
 
Zuletzt bearbeitet:

Flown

Administrator
Mitarbeiter
Ich könnte eigentlich auch eine Liste erstellen und dann ein wenig rumtesten, aber dabei könnte ich ja etwas übersehen, also wäre es sehr nett, wenn ihr schnell einen Blick drüberwerfen könntet.

Nimms mir jetzt nicht übel, aber hier ist keiner ein Tutor der dir deine Aufgaben testet. Das was du anfragst ist eigentlich deine Aufgabe.

Wir helfen hier gerne bei konkreten Problemen und Fragen, aber machen keine Codereviews (ohne das vorher ein Aufwand betrieben wurde).

Was ich dir sagen kann ist, versuch es selbst. Dann wirst du schnell feststellen, dass deine Methoden nicht funktionieren. Zumindest add/remove passen nicht.
 
Zuletzt bearbeitet:

townandroid

Mitglied
Ok, du hast natürlich Recht, ich habe ja selber noch gar nicht geschaut, ob die Methoden überhaupt funktionieren.
Ich melde mich bei Konkreterem wieder.
 
Zuletzt bearbeitet:

townandroid

Mitglied
Ich habe die Methoden add und remove umgeschrieben, das war wirklich ziemlich falsch.
Ich habe mir eine Lise gemacht und jeweils Elemente am Ende, am Anfang und irgendwo in der Mitte entfernt und Elemente am Anfang, am Ende und irgendwo in der Mitte hinzugefügt.

Die Liste sah auch immer so aus, wie ich mir das vorgestellt hatte, es hat auch jedes Element den richtigen Nachfolger und Vorgänger gehabt. Das sollte dann wohl ein Indiz für die Korrektheit der Methoden sein.

Die Methode add

Java:
public void add(int i, String content) { 
		if(front == null && i == 0) {        
			Node newNode = new Node(content); 
			front = newNode;                  
			rear = newNode;                   
		} else {
			Node it = front;
			int actPos;
			for (actPos = 0; it != null && actPos < i; actPos++) {
				it = it.next;
			}
			if(actPos == i) {
				if(it == front) {
				    Node newNode = new Node(content);			
				    newNode.next = it;
				    it.prev = newNode;
           		            front = newNode;
           		            newNode.prev = null;
				} else if(it == rear) {
					Node newNode = new Node(content);
					newNode.next = it;
					newNode.prev = it.prev;
					it.prev.next = newNode;
					it.prev = newNode;
					rear = newNode.next;
					
				} else {
					Node newNode = new Node(content);
					newNode.next = it;
					newNode.prev = it.prev;
					it.prev.next = newNode;
					it.prev = newNode;
				}
				
			} else {
			System.out.println("There is no positon" + i + " in this list");
			}
		  
		}
	}

Die Methode remove

Java:
public void remove(int pos) {
		
		if(front == null) {
			System.out.println("There is no position" + pos + " in this list");
		} else {
			
			Node it = front;
			int actPos;
			for (actPos = 0; actPos < pos && it != null; actPos++ ) {
				
				it = it.next;
				
			}
			if(actPos == pos) {       
                if(it == front) {       
                	it.next.prev = null; 
                	front = it.next;
                	it.next = null;
                } else if(it == rear) {
                	it.prev.next = null;
                	rear = it.prev;
                	it.prev = null;
                } else {
                	
                	it.prev.next = it.next;
                    it.next.prev = it.prev;
                	it.next = null;
                	it.prev = null;
                }

			}
				
		}
		
	}
 
Zuletzt bearbeitet:

Flashed

Neues Mitglied
Theoretisch würdest du die Aufgabe auch so erfüllen:
Code:
import java.util.LinkedList;


public class MyList<string> extends LinkedList{
    
    public MyList(){
        super();
    }
    
    //Die Methode müsstest du trotzdem selbst ausprogrammieren, da LinkedList sowas nicht hat
    public void display(){
        this.forEach((s) -> {
            System.out.println(s);
        });
    }
    
        
    //Könntest du auch weglassen
    @Override
    public void add(int pIndex, Object pString){
        super.add(pIndex, (String)pString);
    }


    //Könntest du auch weglassen
    @Override
    public Object remove(int pIndex){
        return super.remove(pIndex);
    }
    
}


Wobei du die add und remove methode selbst gar nicht schreiben müsstest, da sie in LinkedList schon implementiert sind.

Innerhalb von LinkedList wird das ganze genau so gehandelt (mit Nodes, die die nächste und vorherige Node kennen) wie in der Aufgabenstellung verlangt. Ich weiß allerdings nicht wie dein Lehrer/Prof oder was auch immer das finden wird, da du es dir ja schon recht leicht machst damit :p

Wenn du willst, kannst du dir ja das Ganze mal ansehen.
Einfach in netbeans/eclipse oder welche IDE auch immer du verwendest "LinkedList" schreiben und dann kann man normalerweise rechtsklick drauf machen und "go to declaration" oder irgendwas in die Richtung.

Beste Grüße Flashed</string>
 
Zuletzt bearbeitet:

townandroid

Mitglied
Danke für den Tipp, das habe ich mir auch schon angeschaut, aber in den Übungen haben wir das alles immer mit den Klassen Node und List geschrieben und auf den Aufgaben stünde dann glaube ich auch, dass man die Aufgabenstellung mittels Node und List implementieren soll, also die sind sich dessen schon bewusst.:)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
O Überprüfung auf Existenz einer Methode Java Basics - Anfänger-Themen 6
U Frage zur Überprüfung von einer Zahl Java Basics - Anfänger-Themen 9
B Überprüfung dass Zahl nur aus 0,1 besteht Java Basics - Anfänger-Themen 2
A Überprüfung für unentschieden in TicTacToe Java Basics - Anfänger-Themen 10
A Überprüfung in TicTacToe Java Basics - Anfänger-Themen 5
C Problem mit If Else If und Überprüfung eines Counters Java Basics - Anfänger-Themen 3
S Überprüfung rechtwinkliges Dreieck Java Basics - Anfänger-Themen 4
I Null-Überprüfung durch Lambda-Expressions abkürzen Java Basics - Anfänger-Themen 8
T Algorithmus zur Überprüfung eines binären Suchbaums Java Basics - Anfänger-Themen 2
V Personalnummer Überprüfung Java Basics - Anfänger-Themen 2
P Fallunterscheidung mit Überprüfung (enum) Java Basics - Anfänger-Themen 11
A null-Überprüfung Java Basics - Anfänger-Themen 24
S VierGewinnt Überprüfung Java Basics - Anfänger-Themen 7
J While-Überprüfung wird nicht wahr Java Basics - Anfänger-Themen 2
C Datentypen Methode zur Überprüfung, ob ein Rechenergbnis Int ist Java Basics - Anfänger-Themen 4
C Mit if Überprüfung von drei Werten durchführen Java Basics - Anfänger-Themen 6
B Problem bei Überprüfung des Inhalts eines Arrays Java Basics - Anfänger-Themen 25
S Überprüfung Benutzereingabe Java Basics - Anfänger-Themen 5
J Überprüfung, ob Array aufsteigend sortiert Java Basics - Anfänger-Themen 6
C Überprüfung eines Arrays auf einen speziellen Wert Java Basics - Anfänger-Themen 5
D String-Überprüfung Java Basics - Anfänger-Themen 4
Q Überprüfung ob JTextField einen Text enthält Java Basics - Anfänger-Themen 2
B Überprüfung ob Methode von geerbter Klasse aufgerufen wird Java Basics - Anfänger-Themen 2
C Überprüfung ob Eingabe Text/ASCII Java Basics - Anfänger-Themen 24
J Überprüfung ersten Zeichens Java Basics - Anfänger-Themen 7
D Überprüfung: Double oder Integer Java Basics - Anfänger-Themen 4
N Überprüfung der ZufallsZahl? Java Basics - Anfänger-Themen 2
R Eingabe eines Chars mit Überprüfung Java Basics - Anfänger-Themen 3
O Überprüfung von Eingaben auf Sinnhaftigkeit Java Basics - Anfänger-Themen 7
M Ausgabe einer ArrayList ensteht nur als Hashcode, nicht als Objekt Java Basics - Anfänger-Themen 16
D 2 ArrayListen gleich sortieren bzw. eine Liste anhand einer anderen Sortieren Java Basics - Anfänger-Themen 6
ixChronos Letzten 4 Ziffern einer großen Zahl ausgeben Java Basics - Anfänger-Themen 3
P Objekt einer Methode eines anderen Objektes übergeben Java Basics - Anfänger-Themen 5
L Variablenwerte aus einer Methode übergeben Java Basics - Anfänger-Themen 2
E Arrays in einer ArrayList miteinander vergleichen Java Basics - Anfänger-Themen 12
Simon16 Java ArrayListe von einer Klasse sortieren Java Basics - Anfänger-Themen 2
Shadowrunner Variablen Gibt es eine Möglichkeit die Ziffern/Stellen einer Zahl fest zu legen? Java Basics - Anfänger-Themen 3
D remove Object von einer Liste von Obejcts Java Basics - Anfänger-Themen 3
FunkyPhil94 Wert in einer Lambda Funktion erhöhen Java Basics - Anfänger-Themen 3
T Aufruf der Methode einer Oberklasse, wenn sie in der Unterklasse überschrieben ist. Polymorphie. Java Basics - Anfänger-Themen 2
B Kommunikation mit Seriellen Schnittstellen + Integration einer lib Java Basics - Anfänger-Themen 1
A Daten aus einer HashMap aus einer DB speichern und mit neuen Werten vergleichen Java Basics - Anfänger-Themen 8
P Welches SDK für das erstellen einer ausführbaren Datei? Java Basics - Anfänger-Themen 4
D Länge einer Liste aufrufen. Java Basics - Anfänger-Themen 19
J Klassen Instanzen einer Klasse in einer anderen unabhängigen Klasse nutzen Java Basics - Anfänger-Themen 4
B Alle Strings bis zu einer Maimallänge aufzählen, die Bedingung erfüllen Java Basics - Anfänger-Themen 13
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
Soranix Erste Schritte Struktur als Anfänger // Von einer Klasse auf ein Objekt einer anderen Klasse zugreifen. Java Basics - Anfänger-Themen 6
MoxMorris Wie macht man String[] = String[] aus einer anderer Methode? Java Basics - Anfänger-Themen 18
T Fibonacci mit einer Hilfsmethode berechnen Java Basics - Anfänger-Themen 10
S Hilfe zu einer Aufgabe Java Basics - Anfänger-Themen 5
M Radius von einer ellipse bestimmen Java Basics - Anfänger-Themen 7
Say Fehlenden Code finden in einer while-Schleife? Java Basics - Anfänger-Themen 11
M Zufallszahl generieren mit einer linken und rechten Grenze Java Basics - Anfänger-Themen 3
N Was Passiert mit dem Namen einer Variable, wenn man diese einer Liste Hinzufügt Java Basics - Anfänger-Themen 16
_user_q Wie eine Methode/Funktion aus einer Klasse mit Constructor aufrufen? Java Basics - Anfänger-Themen 20
W String einer Textdatei in einzelne Stringobjekte pro Zeile aufteilen Java Basics - Anfänger-Themen 14
W Objekte einer ArrayList in txt-datei schreiben mit Paths? Java Basics - Anfänger-Themen 2
S Best Practice Fragen zu Projektstruktur einer Datenbank-Abfrage-App (MVC) Java Basics - Anfänger-Themen 13
T Variable von Objekten in einer Methode überprüfen Java Basics - Anfänger-Themen 26
nelsonmandela Problem bei Ausgabe einer Switch - Case Funktion Java Basics - Anfänger-Themen 5
S Textausgabe in einer For-Schleife Java Basics - Anfänger-Themen 12
M Spezifischen Wert einer Zeile aus .txt Datei entnehmen Java Basics - Anfänger-Themen 15
B Popups mit Klicksabfangen zumAusfüllen einer .ods Datei Java Basics - Anfänger-Themen 0
M RandomAccessFile int und String gleichzeitig in einer Datei Java Basics - Anfänger-Themen 49
E Suchfunktion in einer Liste Java Basics - Anfänger-Themen 39
T ungeordnete Werte-Paare in einer Liste Java Basics - Anfänger-Themen 7
FireHorses Einen Command erst nach einer Chateingabe aktivieren Java Basics - Anfänger-Themen 1
frager2345 Singleton-Muster Java ->Nur eine Instanz einer Klasse erzeugen können Java Basics - Anfänger-Themen 45
F wie kann ich die Position des letzten Vokals innerhalb einer Zeichenkette ermitteln? Java Basics - Anfänger-Themen 5
H Kapselung protected aber in einer Kindklasse nicht zugänglich Java Basics - Anfänger-Themen 5
R Methoden Werte einer ArrayList als Parameter übergeben. Java Basics - Anfänger-Themen 4
B Den Dateipfad einer Java Datei durch Code in Selbiger finden? Java Basics - Anfänger-Themen 10
LilliCherry Array in einer Zeile ausgeben Java Basics - Anfänger-Themen 6
B Attribute eines Objekts einer Klasse durch statische Methode einer 2. Klasse ändern? Java Basics - Anfänger-Themen 32
L Dauerhaftes Speichern einer Eingabe bei einer ArrayList Java Basics - Anfänger-Themen 26
V Hilfe bei Implementierung einer boolean Methode Java Basics - Anfänger-Themen 6
G Position einer unbekannten 3-stelligen-Zahl in einem String finden Java Basics - Anfänger-Themen 15
stormyark Fehler beim überschreiben einer Variable Java Basics - Anfänger-Themen 1
H Kompliziertes Sortieren einer ArrayList mit Objekten(Sortieren nach X und Y) Java Basics - Anfänger-Themen 11
T Permanentes speichern von Objekten in einer ArrayList Java Basics - Anfänger-Themen 6
Saiko Zeilen einer Datei einlesen Java Basics - Anfänger-Themen 3
H Erste Schritte Nach einer Zahl n soll n Mal der String untereinander ausgegeben werden Java Basics - Anfänger-Themen 3
G zwei Instanzen einer Klasse Java Basics - Anfänger-Themen 29
sserio Prüfziffer einer ISBN Nummer herrausfinden. Java Basics - Anfänger-Themen 14
J Benennung einer mir unbekannten Java - Ausdrucksweise Java Basics - Anfänger-Themen 5
LFB In einer For-Schleife alles in einer Zeile ausgeben Java Basics - Anfänger-Themen 14
sserio Wie kann man nach einer Klasse fragen? Java Basics - Anfänger-Themen 12
berserkerdq2 Wann soll ich den Stream schließen, wenn ich das in einer Methode habe? Java Basics - Anfänger-Themen 8
berserkerdq2 Wie gebe ich den Pfad zu einer Datei an, die in einem Ordner in Eclipse ist? Java Basics - Anfänger-Themen 1
M Variable in einer Schleife initialisieren Java Basics - Anfänger-Themen 46
D EinMalEins mithilfe einer for-Schleife und Array Java Basics - Anfänger-Themen 1
J int innerhalb einer Datei ändern Java Basics - Anfänger-Themen 1
D Hilfe bei einer Aufgabe mit for-Schleife Java Basics - Anfänger-Themen 6
Neuling47 Ich zerbreche mit den kopf an einer Aufgabe Java Basics - Anfänger-Themen 61
H Mit setter-Methode JLabel in einer andern Klasse ändern. Java Basics - Anfänger-Themen 40
J Zelleninhalt einer Jtable löschen Java Basics - Anfänger-Themen 2
Robert_Klaus Hamster java Simulation Hilfe bei einer Aufgabe Java Basics - Anfänger-Themen 5
stormyark 4 Bit in einer for-schleife funktioniert nicht Java Basics - Anfänger-Themen 3
F Werte in einer Arraylist Zählen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben