Listen und Generics

ETlearner

Mitglied
hallo,
habe wieder mal hausaufgaben im hassfach :(

heir sind die aufgaben(bitte nicht abschrecken, sind nur anfängersachen!!!)

Aufgabe 1 Einfach verkettete Liste
1. Implementieren Sie eine generische Klasse SingleLinkedList<T>, die eine einfach verkettete
Liste von Elementen eines beliebigen Datentyps T darstellt. Sie soll eine innere Klasse
Node enthalten, die ein Element der Liste symbolisiert. Jeder Knoten muss eine Referenz
auf seinen Wert (vom Typ T) und eine Referenz auf den Nachfolgeknoten enthalten. Die
Liste selbst sollte Referenzen auf den ersten und den letzten Knoten besitzen.
2. Implementieren Sie einen parameterlosen Konstruktor SingleLinkedList(), der eine leere
Liste initialisiert.
3. Implementieren Sie einen Konstruktor SingleLinkedList(T[] elements), der eine Liste
initialisiert, welche bereits mit den Elementen im ubergebenen Array gefullt ist.


Aufgabe 2 Listenmethoden
1. Implementieren Sie die Methode void appendHead(T element), die ein neues Element
an den Anfang der Liste anfugt.
2. Implementieren Sie die Methode T popHead(), die das Element am Anfang der Liste
zuruckgibt und entfernt.
3. Implementieren Sie die Methode void appendTail(T element), die ein neues Element
an das Ende der Liste anfugt.
4. Implementieren Sie die Methode T popTail(), die das Element am Ende der Liste zuruckgibt
und entfernt.
Hinweis: Bedenken Sie bei allen Methoden den Sonderfall einer leeren oder einelementigen Liste.
Wenn versucht wird, ein Element aus einer leeren Liste zu entfernen, sollte die Methode den
Zustand der Liste nicht andern und null zuruckgeben.


Aufgabe 3 Test
Schreiben Sie eine Klasse TestListe, die einen Test Ihrer Listenimplementation erlaubt. Die
main-Methode soll eine Liste von Strings mit vier vorgegebenen Elementen erzeugen und mit
Hilfe der toString-Methode ausgeben. Testen Sie dann jede Methode zum Hinzufugen oder
Loschen von Elementen mindestens einmal und lassen Sie die Liste nach jedem Schritt erneut
ausgeben. Sie sollten dabei die Liste mindestens einmal komplett leeren und danach wieder
Elemente anfugen.

und hier sind meine 2 klassen...
bei beidem klappt die kompilierung, doch auf der console wird die folgende warnung ausgegeben:

Note:Testliste.java uses unchecked or unsafe operations
Note:Recompile with -Xlint:unchecked for details


Java:
public class SingleLinkedList <T> {

					private class Node{
						public T element;
						public Node next;
		
						public Node( T element){
							this.element=element;
							next=null;
							}
			
						public Node (T element, Node ref){
							this.element = element;
							this.next = ref;
							}
			
					}

	
	public Node head;
	public Node end;
	public SingleLinkedList(){		//Konstruktor, de eine leere Liste initialisiert
		head.next=end;
		end.next=null;
		}
	
	public SingleLinkedList (T[] elements){
		head.next=end;
		end.next=null;
		SingleLinkedList<T> L= new SingleLinkedList();
		for(int i=elements.length-1; i>=0; i--){
			L.appendHead(elements[i]);
			}
	}
	
	public void appendHead(T element){
		Node n=new Node(element);
		Node a= head.next;
		head.next=n;
		n.next=a;
		}
		
	T popHead(){
		if(head.next==end){ return null;}
		else{ 
			Node Anfang=head.next;
			head.next=head.next.next;
			return (T)Anfang;}
			
	}
	
	void appendTail(T element){
		if(head.next==end){appendHead(element);}
		else{
			Node v=head.next;
			while(v.next != null){
				v=v.next;}
			Node a=new Node(element);
			v.next=a;
			}
	}
	
	T popTail(){
		if(head.next==end){return null;}
		else{
			Node v=head.next;
			while (v.next!= null){
				v=v.next;}
			Node letztes=v;
			Node w=head.next;
			while(w.next!=v){
				w=w.next;}
			w.next=null;
			return (T) letztes;
			}
	}
	
	
		
			
}
Java:
public class TestListe{
	
	
	
	
	public static void main (String[]args){
		String[]a=new String[4];
		a[0]="Informatik";
		a[1]="ist";
		a[2]="mega-";
		a[3]="S*****e!";
		
	SingleLinkedList <String> A= new SingleLinkedList(a);
	
	//TESTE METHODE popHead()
	
	System.out.println(A.popHead());//wird "Informatik" ausgegeben?
	A.toString(); //wurde das erste Element gelöscht?
	
	//TESTE METHODE popTail()
	
	System.out.println(A.popTail());// wird "S*****e!" ausgegeben?
	A.toString(); //wurde das letzte Element gelöscht?
	
	//wir leeren die list : da es nur noch 2 elemente gibt muss man die
	// Methode potail() 2 mal aufrugen
	A.popTail();
	A.popTail();
	A.toString(); //ist die liste jetzt leer?
	
	// TESTE METHODE appendHEAD()
	A.appendHead("NEIN DAS STIMMT DOCH NICHT");
	A.toString();// wurde das element hinzugefügt?
	
	//TESTE METHODE appendTail()
	A.appendTail("INFO IST NICHT S*****E");
	A.toString();// wurde das element hinzugefügt?
	
	}
	
	
}

ich würde mich sehr auf antworten freuen:)

danke im vorraus :)
 

julian.veh

Bekanntes Mitglied
Java:
 SingleLinkedList<String> A= new SingleLinkedList<String>(a);

Ich denke das sollte das erste Problem beheben, wenn ich die Fehlermeldung richtig verstehe ;)
 

ETlearner

Mitglied
danke für die schnelle antwort. habe es sofort geändert
warum erhalte ich den warnungen?i( 12 warnungen)
waurum gibt die konsole keine fehermeldungen aus, wenn etwas falsch ist?
 

Sesostris

Aktives Mitglied
Du verwendest an mehreren Stellen Typecasts, daher die Warnung "unchecked or unsafe operations". Genau denen will man doch mittels Generics aus dem Weg gehen. In deinem Fall geht das auch ganz einfach:
Java:
return Anfang.element;
statt
Java:
return (T)Anfang;
Du willst schließlich nicht einen Knoten zurückgeben, sondern das "darin gespeicherte" Element vom Typ T.

Ich fürchte aber, dass dein Programm trotzdem nicht funktionieren wird. Da sind viele kleine Logikfehler. Bekommst du beim Ausführen keine Exception?
 

Sesostris

Aktives Mitglied
Wenn ich TestListe ausführe, bekomme ich:
Java:
Exception in thread "main" java.lang.NullPointerException
	at SingleLinkedList.<init>(SingleLinkedList.java:28)
	at TestListe.main(TestListe.java:12)
Das war auch zu erwarten, da du von head und end nie ein Objekt erzeugt hast. Folglich sind das Nullreferenzen, auf deren Instanzvariablen du nicht einfach so zugreifen kannst.
 

ETlearner

Mitglied
danke für die hinweise.
habe jetzt den quellcode verändert und das programm läuft endlich.
doch bei der methode poptail() wird das letzte element richtig entfernt, jedoch nicht ausgegeben...
und bei der methode appendtail() wird nicht das richtige element an das ende hinzugefügt...
sind die methoden falsch implementiert worden?
Java:
public class SingleLinkedList <T> {
 
                    public class Node{
                        public T element;
                        public Node next;
        
                        public Node( T element){
                            this.element=element;
                            next=null;
                            }
            
                        public Node (T element, Node ref){
                            this.element = element;
                            this.next = ref;
                            }
            
                    }
 
    
    public Node head=new Node(null);
    public Node end=new Node(null);
    public SingleLinkedList(){      //Konstruktor, de eine leere Liste initialisiert
        head.next=end;
        end.next=null;
        }
    
    public SingleLinkedList (T[] elements){
        head.next=end;
        end.next=null;
        SingleLinkedList<T> L= new SingleLinkedList();
        for(int i=elements.length-1; i>=0; i--){
            L.appendHead(elements[i]);
            }
    }
    
    public void appendHead(T element){
        Node n=new Node(element);
        Node a= head.next;
        head.next=n;
        n.next=a;
        }
        
    T popHead(){
       
			if(head.next==end){ return null;}
			else{
            Node Anfang=head.next;
            head.next=head.next.next;
            return Anfang.element;}
            
    }
    
    void appendTail(T element){
        if(head.next==end){appendHead(element);}
        else{
            Node v=head.next;
            while(v.next != null){
                v=v.next;}
            Node a=new Node(element);
            v.next=a;
            }
    }
    
    T popTail(){
        if(head.next==end){return null;}
        else{
            Node v=head.next;
            while (v.next!= null){
                v=v.next;}
            
            Node w=head.next;
            while(w.next!=v){
                w=w.next;}
			Node letztes=w.next;
            w.next=null;
            return letztes.element;
            }
    }
    
	public String toString() {
			if(this.head.next==null){return "Liste ist leer!";}
			else{
			String b = "";
			Node v=head.next;
				while(v.next!=null){
					b=b+"   "+v.element;
					v=v.next;}

				return b;}}
  }
Java:
public class TestListe{
	  
	
	
	
	public static void main (String[]args){
	
		
	SingleLinkedList<String> A= new SingleLinkedList<String>(); //leere Liste erzeugen
	A.appendHead("ehemalige Optimisten.");
	A.appendHead(" anderes als ");
	A.appendHead("sind nichts ");
	A.appendHead("Pessimisten ");
	System.out.println(A.toString()); //wird die ganze Liste in der richtigen reihenfolge ausgegeben?(funktioniert)
	
	//TESTE METHODE popHead()
	
	System.out.println(A.popHead());//wird "Pessimisten" ausgegeben? (funktioniert)
	System.out.println(A.toString()); //wurde das erste Element gelöscht?(funktioniert)
	
	
	
	//TESTE METHODE popTail()
	
	System.out.println(A.popTail());// wird "ehemalige Optimisten." ausgegeben?                        <<<<<<<<----------------(funktioniert NICHT)
	System.out.println(A.toString()); //wurde das letzte Element gelöscht?(funktioniert)
	

	
	//wir leeren die list : da es nur noch 2 elemente gibt muss man die
	// Methode potail() 2 mal aufrugen (funktioniert)
	A.popTail();
	A.popTail();
	
	System.out.println(A.toString()); //ist die liste jetzt leer?, dann werden mehrere  leere zeile	ausgegeben	 (funktioniert)			
	System.out.println(A.toString());
	System.out.println(A.toString());
	System.out.println(A.toString());

	// TESTE METHODE appendHEAD()
	A.appendHead("JA!");
	System.out.println(A.toString());// wurde das element hinzugefügt?(funktioniert)
	
	
	
	//TESTE METHODE appendTail()
	A.appendTail("DA HAST DU RECHT!");
	System.out.println(A.toString());// wurde das element hinzugefügt?					<<<<<<<--------------(funktioniert nicht!)
	}
	
	
}

danke im voraus
 
S

SlaterB

Gast
du beachtest einfach nicht, dass am Ende noch ein leerer Node steht, ähnlich dem am Anfang,
welchen du bei appendHead + popHead überspringst,

ich habe es jetzt bisschen untersucht und könnte mir natürlich richtigen Code ausdenken,
aber das ist ja gerade deine Aufgabe, da habe ich eigentlich genug Hinweis gegeben, welcher sowieso schon offensichtlich ist,

repariere erst appendTail(), fange mit einer leeren Liste und füge ein Element,
bzw. zwei, vorher zeigt deine Ausgabe den Fehler nicht,

mache das sowohl im Code (temporär neue main-Methode) als auch auf Papier,
überlege dir genau, welches Nodes es gibt, mit welchen Verknüpfungen,

auch die leeren Begin/ End-Nodes aufmalen und besonders auch vorerst im Programm in das toString() usw. integrieren!
es hilft nichts, diese in Logausgaben der Schönheit wegen zu überspringen, wenn du dann nicht genau weißt, was in deinem Programm exakt vorgeht

in Methoden wie appendTail() dürfen auch viele Logausgaben rein, was wird warum übersprungen,
welcher Node letztlich ausgewählt, was angehangen usw.
 

Sesostris

Aktives Mitglied
Ich glaube, mein letzter Hinweis ist etwas missverstanden worden: Ich meinte eigentlich nicht, dass du Objekte von head bzw. end erzeugen, sondern auf die undefinierten Instanzvariablen verzichten solltest. Es reicht, wenn head auf den ersten Knoten zeigt, ohne selbst ein eigenes Knoten-Objekt zu sein.
Und dein end zeigt überhaupt ins nirgendwo. Du setzt es im Konstruktur auf null, aber dann änderst du es nie wieder.

Ich habe dir einmal die appendHead-Methode korrigiert:
Java:
    public void appendHead(T element) {
    	Node n = new Node(element);
    	if (head == null) { // leere Liste?
    		head = end = n; // wenn  ja, dann gibt nur den neuen Knoten, der zugleich der erste (head) und der letzte (end) ist
    	} else {
    		n.next = head; // andernfalls wird der erste zum zweiten Knoten
    		head = n; // und der eben hinzugefügte Knoten ist nun der erste
    	}
    }
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Generics Vererbung Listen Java Basics - Anfänger-Themen 2
T Collections Sind Subklassen-Objekte in Listen mit Generics erlaubt? Java Basics - Anfänger-Themen 16
K Interface Generics, Interfaces und Listen - ich bin verwirrt. Java Basics - Anfänger-Themen 7
B Java Listen und Generics Java Basics - Anfänger-Themen 35
D Listen in Listen in Listen ... ??? Java Basics - Anfänger-Themen 2
XWing listen Java Basics - Anfänger-Themen 7
FunkyPhil94 addLast und addFirst bei Listen Java Basics - Anfänger-Themen 6
S Einfach-Verkettete-Listen Ausgabe zeigt nur 1. und letzte instanz Java Basics - Anfänger-Themen 2
J 2 listen vergleichen, die auch null Elemente haben können ! Java Basics - Anfänger-Themen 9
W Liste mit Listen in JTable darstellen Java Basics - Anfänger-Themen 1
Buroto Threads Verschiedene .txt Dateien Auf Listen und Verbinden Java Basics - Anfänger-Themen 3
S Lineare listen verkettung Java Basics - Anfänger-Themen 7
S Listen Java Basics - Anfänger-Themen 12
S Listen , Nodes am ende anängen Java Basics - Anfänger-Themen 6
P Sortieren von Listen nach Attributen Java Basics - Anfänger-Themen 3
M Java Listen Java Basics - Anfänger-Themen 4
V einfach verkettete Listen Java Basics - Anfänger-Themen 10
A PhoneBook mit verketteten listen Java Basics - Anfänger-Themen 48
F ich brauche Hilfe bei Listen Java Basics - Anfänger-Themen 13
M (Sehr großes Problem) Listen als static in anderen Klassen verwendet Java Basics - Anfänger-Themen 12
G Java Listen und Iterator Java Basics - Anfänger-Themen 2
S Erklaerung Listen Java Basics - Anfänger-Themen 27
J Implementierung Listen-ADT Java Basics - Anfänger-Themen 131
I Alle Elemente von zwei Listen vergleichen Java Basics - Anfänger-Themen 1
L Skip Listen Java Basics - Anfänger-Themen 5
S Collections funktionale Listen (ListNode<E>) review und problem beim clone Java Basics - Anfänger-Themen 0
L Wie testet man (selbstgeschriebene) Listen sinnvoll? Java Basics - Anfänger-Themen 2
F Problem mit Listen Java Basics - Anfänger-Themen 5
J Listen Operationen Java Basics - Anfänger-Themen 4
O Unterschied Arrays, Listen, Mengen Java Basics - Anfänger-Themen 24
J Eine Liste von Listen erstellen Java Basics - Anfänger-Themen 11
A Sortierte Listen Java Basics - Anfänger-Themen 4
L Datenstrukturen/ Listen Java Basics - Anfänger-Themen 17
A Was könnten typische Prüfungsaufgaben zum Thema lineare, verkettete Listen sein? Java Basics - Anfänger-Themen 5
L Listen und Felder Java Basics - Anfänger-Themen 2
M Fragen zum Anlegen und Benutzen von Listen Java Basics - Anfänger-Themen 9
R Arrays und Listen Java Basics - Anfänger-Themen 1
R Listen richtig implementieren Java Basics - Anfänger-Themen 3
F Multidimensionale Listen Java Basics - Anfänger-Themen 3
F Wie String in unterschiedliche Listen teilen Java Basics - Anfänger-Themen 7
R Interface Eigene Objekte in Listen sortieren mit Interface Comparable Java Basics - Anfänger-Themen 5
T Objekte in Listen vererben Java Basics - Anfänger-Themen 3
A Klassen Klassen und Listen... Java Basics - Anfänger-Themen 5
Hacer Operationen einfach verketteter Listen Java Basics - Anfänger-Themen 22
S Methoden Vergleichen von zwei Listen in der Geschwindigkeit von O(n+m) Java Basics - Anfänger-Themen 32
P Listen sortieren mit Binärbaum gibt keine Ausgabe ab 10000 Integern Java Basics - Anfänger-Themen 14
C Listen Java Basics - Anfänger-Themen 3
C Zwei Listen verbinden Java Basics - Anfänger-Themen 1
C Zahlen merken mit Hilfe von Arrays/Listen Java Basics - Anfänger-Themen 2
E Feld von verketteten Listen Java Basics - Anfänger-Themen 11
T Überprüfung einer Aufgabe zu verketteten Listen Java Basics - Anfänger-Themen 5
S Liste mit Objekten und Listen Java Basics - Anfänger-Themen 9
JarJarBigs Frage zu Listen Java Basics - Anfänger-Themen 2
N verkettete Listen Java Basics - Anfänger-Themen 4
O Listen sort-Methode Java Basics - Anfänger-Themen 1
I Listen sortieren bei mehreren Listen zu einer Java Basics - Anfänger-Themen 2
L Lineare Listen Java Basics - Anfänger-Themen 2
S Listen Objekte nach LocalDateTime sortieren Java Basics - Anfänger-Themen 2
D Methoden Listen generieren Java Basics - Anfänger-Themen 4
A Sichtbarkeit in Methoden/Listen Java Basics - Anfänger-Themen 3
M verkettete Listen Java Basics - Anfänger-Themen 1
D Klausur Vorbereitung: Listen, Rekursion, Bäume & Vererbung Java Basics - Anfänger-Themen 3
S Vergleich von Listen Java Basics - Anfänger-Themen 6
I Zwei Listen vergleichen Java Basics - Anfänger-Themen 2
M Listen erstellen mit unterschiedlichen Reihenfolgen Java Basics - Anfänger-Themen 3
I Zwei Listen vergleichen bei n:m Beziehung Java Basics - Anfänger-Themen 2
I Zwei Listen: Wenn nicht vorhanden löschen Java Basics - Anfänger-Themen 4
I Prüfen von zwei Listen Java Basics - Anfänger-Themen 1
L Best Practice Alle Kombinationen aus Listenelementen, Anzahl Listen unterschiedlich Java Basics - Anfänger-Themen 6
llabusch Verkette Listen - Einfach und Doppelt Java Basics - Anfänger-Themen 3
S Unsortierte Listen - Frage zur "Verkettung" Java Basics - Anfänger-Themen 1
I Zwei Listen vergleichen Java Basics - Anfänger-Themen 7
I Listen, for - Schleifen Java Basics - Anfänger-Themen 8
P Listen Size stimmt nicht Java Basics - Anfänger-Themen 5
O Objekt Listen serialisierung und deserialisieren Java Basics - Anfänger-Themen 5
L Collections Objekte in Listen speichern Java Basics - Anfänger-Themen 3
G 2 Listen kombinieren und nach abc sortieren Java Basics - Anfänger-Themen 9
D Annonyme Innere Klasse: Listen mit geradem Index ausgeben Java Basics - Anfänger-Themen 6
G Listen sortieren Java Basics - Anfänger-Themen 3
G Generic und Listen Java Basics - Anfänger-Themen 8
R SQL ähnlicher Filter für Java Listen Java Basics - Anfänger-Themen 2
Y Collections 4 Listen Java Basics - Anfänger-Themen 14
S OOP/ Listen...etc... Java Basics - Anfänger-Themen 14
E Listen Java Basics - Anfänger-Themen 2
V Methoden Verkettete Listen Index eines Elementes ausgeben Java Basics - Anfänger-Themen 10
B Listen Java Basics - Anfänger-Themen 3
B eigene klasse in listen eintragen Java Basics - Anfänger-Themen 6
B Map per Listen Java Basics - Anfänger-Themen 2
S Erfahrungswerte von schnelles durchlaufen von Listen mit 2 Werten Java Basics - Anfänger-Themen 10
Joew0815 Problem mit Listen: add() Java Basics - Anfänger-Themen 11
P Zeichenorientierte & Serialisierte Datenverarbeitung Listen Java Basics - Anfänger-Themen 8
L dynamisches erzeugen von array Listen Java Basics - Anfänger-Themen 7
E Listen und Duplikate Java Basics - Anfänger-Themen 2
R Hilfe bei Listen Java Basics - Anfänger-Themen 10
F Collections Liste von Listen Java Basics - Anfänger-Themen 21
A Methoden Anfängerfrage: 2 Listen Vergleichen Java Basics - Anfänger-Themen 7
walker23m C++ Listen iteratoren in Java umwandeln Java Basics - Anfänger-Themen 3
X Listen und verschiedene Methoden Java Basics - Anfänger-Themen 6
N Listen Java Basics - Anfänger-Themen 5
S Listen Klasse selbst schreiben Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben