Also, ist jetzt ein bissel schwer zu erklären, aber ich hoffe ihr kommt ein wenig mit. Ich soll ein Stack in einem Stack entwickeln , dazu muss ich eine wie ein Stack behandelte Liste implementieren die in ihren Val Felder beinhaltet die ebenfalls wie ein Stack behandelt werden. Push und Pop funktionieren einwandfrei, bloß die SetValTop Funktion macht viele Probleme. Ich soll sie nicht mit der Push Funktion machen, und deshalb mir den Ablauf so ausgelegt:
1. zum letzten befüllten Feld springen mit dem Befehl Object kacheln[] = (Object[])bs.top();
2. dann eigentlich das gleiche wie in Push machen, da es ja eigentlich nichts anderes ist...
Aber so richtig will er das nicht machen, bzw. er fügt zwar etwas ein, aber wenn ich danach die Top Funktion die mir den obersten Eintrag anzeigen soll ausführe meldet er mir java.lang.ArrayIndexOutOfBoundsException: 2, was ja eigentlich bedeutet das ich bei einer Feldlänge von 2 aus dem Array raus laufe.
Hier der Code:
Und einmal aus dem Testprogramm die Stelle die Fehler macht:
s.setValTop(new Integer(11)); //das macht er noch, hab ich nachgeprüft
System.out.println("top: " + s.top()); //ab hier Fehlermeldung
1. zum letzten befüllten Feld springen mit dem Befehl Object kacheln[] = (Object[])bs.top();
2. dann eigentlich das gleiche wie in Push machen, da es ja eigentlich nichts anderes ist...
Aber so richtig will er das nicht machen, bzw. er fügt zwar etwas ein, aber wenn ich danach die Top Funktion die mir den obersten Eintrag anzeigen soll ausführe meldet er mir java.lang.ArrayIndexOutOfBoundsException: 2, was ja eigentlich bedeutet das ich bei einer Feldlänge von 2 aus dem Array raus laufe.
Hier der Code:
Code:
package Lists;
public class OptStack {
public OptStack() {
this.zeigerfeld = 0; //Zeiger für das aktuelle Feld (tb)
this.bs = new Stack(); //leeren Keller mit Stack konstruieren
}
public boolean isEmpty() { //leerer Stack Abfrage
return bs.isEmpty();
}
public Object top() { // zum ersten (letzten)
Object kacheln[] = (Object[])bs.top();
if (!bs.isEmpty())
return kacheln[zeigerfeld]; //Rückgabe der ersten Kachel
else {
return null;
}
}
public void setValTop (Object Val) { //Bearbeiten des ersten
if (!bs.isEmpty()) { //Wenn nicht leer
Object kacheln[] = (Object[])bs.top();
if (zeigerfeld<(kacheln.length)) { //Fall: Ist noch mindestens eine Kachel frei
kacheln[zeigerfeld++] = Val; //füge in die nächst höhere Kachel den Inhalt ein
//System.out.println("Variable wurde eingefügt: " +Val); //Bestätigung
}
else { //Fall: Keine Kachel mehr frei
kacheln[kacheln.length-1] = Val;
zeigerfeld = kacheln.length-1;
bs.push(kacheln);
System.out.println("+++++ neues Bucket anlegen");
//kacheln[zeigerfeld] = Val; //füge in diese Kachel den Inhalt ein
//System.out.println("Variable wurde eingefügt: " +Val); //Bestätigung
}
}
else
System.out.println ("setValTop: Keller ist leer."); //Fehlermeldung
}
public void push(Object Val) { //Einfügen
if (bs.isEmpty()) { //Fall: Stack ist leer
Object []kacheln = new Object [groesse]; //neue Kacheln anlegen
kacheln[kacheln.length-1] = Val; //Val in das letzte Kachelfeld einsetzen
zeigerfeld = kacheln.length-1; //Zeiger auf das letzte Feld setzen
bs.push(kacheln); //in den Stack einfügen
System.out.println("+++++ neues Bucket anlegen");
}
else {
Object kacheln[] = (Object[])bs.top();
if (zeigerfeld<(kacheln.length)) { //Fall: Ist noch mindestens eine Kachel frei
kacheln[zeigerfeld++] = Val; //füge in die nächst höhere Kachel den Inhalt ein
//System.out.println("Variable wurde eingefügt: " +Val); //Bestätigung
}
else { //Fall: Keine Kachel mehr frei
kacheln[kacheln.length-1] = Val;
zeigerfeld = kacheln.length-1;
bs.push(kacheln);
System.out.println("+++++ neues Bucket anlegen");
//kacheln[zeigerfeld] = Val; //füge in diese Kachel den Inhalt ein
//System.out.println("Variable wurde eingefügt: " +Val); //Bestätigung
}
}
}
public void pop () { //Löschen
if (zeigerfeld >= 0) {
zeigerfeld++ ; //löschen
System.out.println("+++++ leeres Bucket freigeben"); //Bestätigung
}
if (zeigerfeld == groesse-1 ) {
bs.pop(); //Kacheln aus dem Stack nehmen
zeigerfeld = 0;// Stack löschen
}
}
public int groesse = 2; //Anzahl der maximal enthaltenen Kacheln
private int zeigerfeld; //Zeiger auf das Inhaltsfeld (tb)
private Stack bs; //als Keller verwaltete lineare Liste
}
Und einmal aus dem Testprogramm die Stelle die Fehler macht:
s.setValTop(new Integer(11)); //das macht er noch, hab ich nachgeprüft
System.out.println("top: " + s.top()); //ab hier Fehlermeldung