Hallo Gemeinschaft,
Bevor ich zu den Fragen komme, ersteinmal das was mit gegeben wurde und die Aufgabenstellung:
Aufgabe: Schreiben Sie eine generische Klasse LinkedList, die dieses List-Interface implementiert. Dabei
soll die Liste in dieser Klasse intern durch eine einfach verkettete Liste realisiert sein.
Außerdem ist die Klasse gründlich zu testen.
So das folgende habe ich bisher gedodet:
mit der passende Main Klasse dazu:
Nun zu den Fragen bzw Problem, wo ich bisher noch nicht weiter weiss:
1. Wie muss ich LinkedList verändern, damit ich in der Main auch andere nicht primitive Typen in der LinkedList testen kann? Derzeit kann ich nur String Typen ausgeben. ICh habe dass schon mit Integer getestet, also eine neue LinkedList list1 vom Typ Integer erstellt und Werte hinzugefügt, aber auf der Ausgabe sind nur die list Werte zu sehen. Irgendwie ist die Methode gibAlles in Kombination mit der debug (eigentlich toString) nicht so ganz richtig.
Anmerkung dazu: wenn ich die Methode GibAlles weglasse und stattdessen Sysout(list), eingebe erscheint @7919298d. Das ist ja eine Speicheradresse. Aber ich komme nicht an die Werte.
2. mir erscheint es, als hätte ich in LinkedList ein wenig zu viele VAriablen stehen bzw der Code ist ganz schön aufgebläht. Habt ihr einen Verbesserungsvorschlag, wenn es geht mit Erklärung??
Anmerkung: An den 3 Methoden contains und get arbeite ich derzeit noch, aber die spielen ja zum jetztigen Problem keine Rolle.
Ich wäre euch für eure Hilfe echt dankbar.
Mario
Bevor ich zu den Fragen komme, ersteinmal das was mit gegeben wurde und die Aufgabenstellung:
Java:
public interface List<T> {
/**
* fuegt einen Wert an einem Ende der Liste an
* @param value der einzufuegende Wert
*/
public void add(T value);
/**
* entfernt einen Wert an dem Ende der Liste, an dem auch eingefügt wird
* @return der entfernte Wert bzw. null, wenn Liste leer ist
*/
public T remove();
/**
* stellt fest, ob ein Wert in der Liste enthalten ist (nutzt equals)
* @param value der gesuchte Wert
* @return true g.d.w. value in der Liste enthalten ist
*/
public boolean contains(T value);
/**
* entfernt das erste Vorkommen eines Objektes mit dem übergebenen Wert
* @param value der zu entfernende Wert
* @return der entfernte Wert, wenn vorhanden; sonst: null
*/
public T remove(T value);
/**
* liefert das erste Objektes mit dem übergebenen Wert
* @param value der zu suchende Wert
* @return der gefundene Wert, falls vorhanden; sonst null
*/
public T get(T value);
}
soll die Liste in dieser Klasse intern durch eine einfach verkettete Liste realisiert sein.
Außerdem ist die Klasse gründlich zu testen.
So das folgende habe ich bisher gedodet:
Java:
class LinkedList<T> implements List_I<T> {
public class Note<T>{
private T element;
Note<T> next = null;
public Note(T value){
this.element = value;
}
public T getElement() {
return element;
}
public void setElement(T element) {
this.element = element;
}
public Note<T> getNext() {
return next;
}
public void setNext(Note<T> next) {
this.next = next;
}
public void debug() {
System.out.println(((String)element).toString());
//System.out.println(((String)element).toString() + ": \"" + ((String)element).toString());
}
}
public Note<T> erster = null;
public Note<T> letzter = null;
/**
* fuegt einen Wert an einem Ende der Liste an
* @param value der einzufuegende Wert
*/
@Override
public void add(T value) {
Note<T> obj = new Note<T>(value);
if(erster == null){
obj.next = null;
erster = obj;
letzter = obj;
}else{
letzter.next = obj;
obj.next = null;
letzter = obj;
}
}
/**
* entfernt einen Wert an dem Ende der Liste, an dem auch eingefügt wird
* @return der entfernte Wert bzw. null, wenn Liste leer ist
*/
@Override
public T remove() {
if (erster == null) return null;
Note<T> obj = erster;
Note<T> vorrige = null;
while (obj!=null) {
if (obj.next == null){
letzter = vorrige;
letzter.next = null;
return (T) obj;
}
vorrige = obj;
obj = obj.next;
}
return null;
}
@Override
public boolean contains(T value) {
/**
* stellt fest, ob ein Wert in der Liste enthalten ist (nutzt equals)
* @param value der gesuchte Wert
* @return true g.d.w. value in der Liste enthalten ist
*/
return false;
}
@Override
public T remove(T value) {
/**
* entfernt das erste Vorkommen eines Objektes mit dem übergebenen Wert
* @param value der zu entfernende Wert
* @return der entfernte Wert, wenn vorhanden; sonst: null
*/
return null;
}
@Override
public T get(T value) {
return value;
/**
* liefert das erste Objekt mit dem übergebenen Wert
* @param value der zu suchende Wert
* @return der gefundene Wert, falls vorhanden; sonst null
*/
}
public void gibAlles(){
Note<T> obj = erster;
while (obj!=null ) {
obj.debug();
obj = obj.next;
}
System.out.println();
}
}
mit der passende Main Klasse dazu:
Java:
public class MainLinkedListTest {
public static void main(String[] args) {
//Beginn: wir testen die Methoden auf LinkedList<String>
LinkedList<String> list = new LinkedList<String>();
System.out.println("---------------------------------------------");
System.out.println("Beginn Eintraege <String> hinzufuegen. \n");
System.out.println("Ausgabe nach dem Hinzufuegen:");
list.add("Testeintrag 1");
list.add("Testeintrag 2");
list.add("Testeintrag 3");
list.add("Testeintrag 4");
list.add("Testeintrag 2");
list.add("Testeintrag 1");
list.gibAlles();
System.out.println("Ende Eintraege <String> hinzufueger.");
System.out.println("---------------------------------------------");
System.out.println("---------------------------------------------");
System.out.println("Beginn letzten Eintrag <String> loeschen. \n");
System.out.println("Ausgabe vor dem Loeschen:");
list.gibAlles();
System.out.println("Ausgabe nach dem Loeschen:");
list.remove();
list.gibAlles();
System.out.println("Ende letzten Eintrag <String> loeschen.");
System.out.println("--------------------------------------------");
//Ende: wir testen die Methoden auf LinkedList<String>
}
}
Nun zu den Fragen bzw Problem, wo ich bisher noch nicht weiter weiss:
1. Wie muss ich LinkedList verändern, damit ich in der Main auch andere nicht primitive Typen in der LinkedList testen kann? Derzeit kann ich nur String Typen ausgeben. ICh habe dass schon mit Integer getestet, also eine neue LinkedList list1 vom Typ Integer erstellt und Werte hinzugefügt, aber auf der Ausgabe sind nur die list Werte zu sehen. Irgendwie ist die Methode gibAlles in Kombination mit der debug (eigentlich toString) nicht so ganz richtig.
Anmerkung dazu: wenn ich die Methode GibAlles weglasse und stattdessen Sysout(list), eingebe erscheint @7919298d. Das ist ja eine Speicheradresse. Aber ich komme nicht an die Werte.
2. mir erscheint es, als hätte ich in LinkedList ein wenig zu viele VAriablen stehen bzw der Code ist ganz schön aufgebläht. Habt ihr einen Verbesserungsvorschlag, wenn es geht mit Erklärung??
Anmerkung: An den 3 Methoden contains und get arbeite ich derzeit noch, aber die spielen ja zum jetztigen Problem keine Rolle.
Ich wäre euch für eure Hilfe echt dankbar.
Mario
Zuletzt bearbeitet: