#1 4. November 2010 Anfängerhilfe Stack Hallo zusammen, im Infountterricht sollten wir einen Stack selbst programmieren, danach einen dynamischen Stack (also erst mit Array dann mit Referenz). Nun habe ich das ganze ein wenig erweitert und habe folgendes Problem: Ich will eine Reihe von Zahlen aus einer Textdatei auslesen, diese Zahlen werden dann von String in Integers umgewandelt und an das Applet was das ganze ausgibt übergeben. Das klappt soweit, die Daten kommen im Applet an und werden dort in einem Array gespeichert. Allerdings werden die Daten dann nicht in den Stack gepackt, obwohl ich die Methoden dazu (meines erachtens) korrekt ausführe. Habe auch schon beides versucht, die Push-Methode des Applets sowie direkt über die Push-Methode des Stacks Code: public void readIt() { theReader reader = new theReader(); //Readerklasse tempList = reader.getList(); // Methode der Readerklasse die den Array gibt for(int i=0; i<tempList.length; i++) { n++; //Variable aus dem Applet um zu sehen wie lang der Stack nun ist add(tempList[i]); //Methode des Applets die den Integer Parameter an den //Stack weitergibt Stack.push(tempList[i]); //Direkte Pushmethode des Stacks, nur eins von //beiden jeweils ausgeführt } } Die Pushmethode des Stacks Code: public void push(int a) { ele h = new ele(); h.value = a; h.next = tos; tos = h; } Die Addmethode des Applets Code: public void add(int a) { n++; // s.o. Stack.push(a); // Ruft die Pushmethode des Stacks aus box2.setText(null); //Für diesen Teil irrelevant } Alle anderen Methoden die die Pushmethode des Stacks / die Addmethode des Arrays nutzen funktionieren. Danke im vorraus. + Multi-Zitat Zitieren
#2 4. November 2010 AW: Anfängerhilfe Stack hast du deine alle methoden in deiner stack klasse statisch gemacht? wenn ja, wäre das schonmal ein falscher ansatz. was ist tos? einfach mal bitte die komplette stack klasse posten. gruß + Multi-Zitat Zitieren
#3 4. November 2010 AW: Anfängerhilfe Stack ^ Dummerweise habe ich derzeit keinen zugrief auf die Stack Klasse, aber tos gibt jeweils das element an, welches derzeit Oben auf dem Stack liegt. Die Klassen sind nicht statisch. Falls es hilft schreibe ich hier noch gerade, was die Klassen ele und stack tun: Stack: Der Stack hat die Methoden: push(int), welche ein neues Element zum Stack hinzufügt, dam neuen element (im beispiel "h") wird dabei der wert aus dem int parameter hinzugefügt, sowie die variable "next" welche auf das element davor zeigt, also das derzeitge "tos" (top of stack). Dadurch entsteht eine kette, Ele->Ele->Ele , bei der das jeweilis oberste Element auf das unter ihm zeigt. pop(), sorgt dafür, das der tos auf das element unter dem derzeitigen tos gesetzt wird. top(), gibt den wert des tos elements zurück Ele(Element): Das Element beinhaltet nur die Integer Variable "value" die den wert speichert dem es zugewiesen wird, und eine Variable "next" welche ebenfalls ein Element ist und auf das element unter ihm zeigt. Edit: So, nun noch die Quelltexte von Ele und stack Code: public class stack { ele tos; public stack() { } public void push(int a) { ele h = new ele(); h.value = a; h.next = tos; tos = h; } public String top() { if(empty()) return "Empty" ; else return Integer.toString(tos.value); } public void pop() { if(empty()) return; else tos = tos.next; } public boolean empty() { if(tos == null) return true; else return false; } } Code: public class ele extends Object { public int value; public ele next, from; } + Multi-Zitat Zitieren
#4 4. November 2010 AW: Anfängerhilfe Stack Code: public void add(int a) { n++; // s.o. Stack.push(a); // Ruft die Pushmethode des Stacks aus box2.setText(null); //Für diesen Teil irrelevant } Stack.push(a) sieht so aus, als würdest du die statische Methode push() von einer Stack-Klasse aufrufen und nicht die Methode einer variable. Also ohne die ganze Klasse zu sehen ist es Schwer einen Fehler zu finden, aber mir sind ein paar andere Dinge aufgefallen: Code: public class ele extends Object { public int value; public ele next, from; } Klassennamen sollten immer mit einem Großbuchstaben beginnen. Das "extends Object" brauch nicht explicit angegeben werden, da jede Klasse von Object erbt. Code: if(empty()) return "Empty" ; else return Integer.toString(tos.value); Wenn empty() true zurückgibt wird mit return eh die Methode verlassen, da ist das else also überflüssig. Die Methode empty könntest du noch so verkürzen: Code: return (tos == null); In der Methode readIt() erhöhst du inder Schleife n jedesmal um eins. Du könntest auch einmal vor der Schleife Code: n += tempList.length; + Multi-Zitat Zitieren
#5 5. November 2010 AW: Anfängerhilfe Stack Aber die Klasse stack hab ich doch geposted ?( . Das "extends Object" hab ich auch gesehen als ich den Quelltext geposted hab und dann entfernt. + Multi-Zitat Zitieren
#6 7. November 2010 AW: Anfängerhilfe Stack Als erstes solltest du prüfen wo und ob du eine Zeile hast die in etwa so aussehen könnte: Code: Stack myStack = new Stack(); Mir scheint als würdest du im Applet Stack als statisches Objekt behandeln. Das kann zu Fehlern verursachen. Zusätzlich solltest bedenken, dass dein Stack hier ausschließlich Objekte vom Typ "ele" (wie wäre es mit "Element"?) enthält. Hier ist es ratsam generics zu verwenden: Code: public class Stack<T> { T tos; // schreib das mal etwas mehr aus "tos" ist zu kurz ... ... } Letztenendes muss die Stackinstanziierung so aussehen, falls du generics nutzen willst: Code: Stack<ele> myStack = new Stack<ele>(); + Multi-Zitat Zitieren
#7 5. Dezember 2010 AW: Anfängerhilfe Stack Ich würde niemals die Schablone "ele" taufen, bennene sie als Data oder Info das sieht besser aus finde ich. Niemals Variablen oder Konstanten public lassen. Info ist eine reine Klasse für die Daten bzw. Information, baue dir noch eine Knoten-klasse die, die Infos verbindet. Das ist jetzt für reine interger Werte. Die Knotenklasse schreibe selber. Code: public class Info{ private int value; public Info(int data){ this.setInfo(data); } public Info(){ this(0); } private setInfo(int info){ this.value = info; } public getInfo(){ return this.value; } } Ich hoffe das wolltest du jetzt auch so. + Multi-Zitat Zitieren
#8 6. Dezember 2010 AW: Anfängerhilfe Stack Man bräuchte noch den kompletten codes Applets wollen einige sagen + Multi-Zitat Zitieren