verkettete Liste - Ausgabeproblem

  • Themenstarter Themenstarter loco007
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
L

loco007

Gast
Hallo,

und zwar habe ich folgendes Problem.

Ich habe eine Klasse die eine Verkettete Liste darstellt mir einem generischen Datentyp, diese implementiert ein Interface und ich habe eine Klasse Element in der die Werte der verketteten Liste stehen.

Hier sind die Klassen erstmal:

Code:
interface ADTList<T>{
  boolean isEmpty();
  boolean isInList(T x);
  int length();
  T firstElement();
  void insert(T x);
  void append(T x);
  void delete(T x);
  void delete();
}


######################################

public class List<T> implements ADTList<T> {
// Datenfeld
private T item;
// Zeigerfeld
private List<T> next;
// Konstruktor, erzeugt leere Liste
public List() {
item = null;
next = null;
}

// Selektoren
public T getItem() {
return item;
}
public List<T> getNext() {
return next;
}
// ist die Liste leer?
public boolean isEmpty() {
return next == null;
}

public T firstElement() {
if (isEmpty())
return null;
else
return next.item;
}

public int length() {
if (isEmpty())
return 0;
else
return 1 + next.length();
}

// fügt x am Kopf ein
public void insert(T x) {
List<T> l = new List<T>();
l.item = x;
l.next = next;
next = l;
}

// hängt x an das Ende der Liste und liefert Teilliste: -->(x)
public void append(T x) {
if (isEmpty())
insert(x);
else
next.append(x);
}


// entfernt erstes x der Liste
// (... x y ...) wird zu (... y ...)
public void delete(T x) {
List<T> l = find(x);
if (l != null)
l.next = l.next.next;
}

// entfernt das erste Element der Liste
public void delete() {
if (!isEmpty())
next = next.next;
}

private List<T> find(T x) {
if (isEmpty())
return null;
else
if (firstElement().equals(x))
return this;
else
return next.find(x);
}

public boolean isInList(T x) {
return (find(x) != null);
}


public String toString() {
return (next == null ? " |--" : " --> " + next.item + next);
}
}

################################################

class Element {
  private short wert;

  public Element(){
  }
  
  public Element(short wert){
    if (wert>=0&&wert<=10000) 
	  this.wert = wert;
    else
	  System.out.println("Der Wert liegt nicht im Grenzbereich: "+wert);
    
  }

  public void setValue (short wert) {
    if (wert>=0&&wert<=10000){
	  this.wert = wert;
    }	
	else{
	  System.out.println("Der Wert liegt nicht im Grenzbereich: "+wert);
    }  
  }
  public short getValue() {
    return wert;
  }
}


Soweit sogut, kompilieren tut das ganze, jetzt will ich das ganze testen:



Code:
  short s = 1;
  Element e = new Element(s);  
  System.out.println(e.getValue()); //gibt 1 aus
  List<Element> li = new List<Element>();
  li.insert(e);
  System.out.println(li.toString());

Das funktioniert nicht dabei gibt er aus:
--> Element_int@1372a1a |--

Aber er soll ausgeben --> 1 |--

er gibt quasi nur einen Zeiger aus?!Wenn ich allerdings das hier benutze:

Code:
 List<Integer> li = new List<Integer>();
 li.insert(999); 
 System.out.println(li.toString());

funktioniert das Ganze und er gibt 999 aus. Kann mir bitte jemand erklären was hier falsch läuft?


mfg


PS: tut mir leid dass die Formatierung der list.java kaputt ist :/
 
Du musst in der Klasse Element die Methode "public String toString()" implementieren. Da kommt her, was über
System.out.println() ausgegeben wird.

EDIT: Vergiss das oder merk es dir für später. Hab deine Frage falsch gelesen.
EDIT2: stimmt doch. Verflixt... Implementiere toString, dann passt es.
 
Danke habs grad auch rausgefunden nachdem ich die sun hilfe nochmal gelesen habe! Und and em Problem saß ich seit 16 Uhr :-/

Aber jetzt wo es funktioniert freut man sich ja doch 😀

für jeden den es interessiert die toString Methode gibt standartmässig diese bedeutung aus:
getClass().getName() + '@' + Integer.toHexString(hashCode())

und das führte halt zu der Meldung dich ich oben hatte weil ich sie nicht mit meiner eigenen überschrieben haben.


So jetzt kann ich endlich weiterprogrammieren 🙂
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben