Ich bin echt schon am Verzweifeln was diese Klasse angeht.
Die Klasse simuliert einen Stack mit typischen Operationen wie Push,Top und Pop auf Basis eines Arrays.Nur mit folgender Besonderheit: Wenn das Array a voll ist, werden die Element in ein 2. Array (temp) kopiert,das doppelt so groß ist.
Problem:
Es hagelt eine ArrayIndexOutOfbOundsException. Wenn ich eine push folge von mehr als 10 mache und dann mit top lesen möchte,hagelt es diese Exception.
Wenn ich sie in der TestKlasse abfange, funktioniert es auch nicht.
Wo steckt bitte der Fehler? :bahnhof:
Java:
publicfinalclassStackDYN{privateint count;// aktuelle Zahl der Elemente -1privateint[] a =newint[10];// Ablageplatz fuer die Elementeint[] temp =newint[a.length *2];// Invariante: -1 <= count <= 9publicStackDYN(){// Konstruktor, erzeugt den leeren Stapel
count =-1;}publicvoidpush(finalint x)throwsException{//Oberste Element drauflegenif(count >= a.length){// inhalt von a nach temp kopierenfor(int i =0; i < a.length;i++){
temp[i]= a[i];}}if(count < a.length){
count++;
a[count]= x;}if(count <-1)thrownewException();}publicinttop(){try{if(count >= a.length)return temp[count];}catch(ArrayIndexOutofBoundsException e){}return a[count];}publicvoidpop()throwsException{// Oberste Element entfernif(count >=0)
count--;if(count <-1)thrownewException();}}
bzw mas machst du da überhaupt mit dem temp? Ist doch falsch.
Wenn dein Stack zu groß ist musst du ein neues array erstellen, umkopieren und dann dieses verwenden. das heißt aber nicht das du dann immer temp verwendest sondern zu lässt einfach dein array auf temp zeigen.
Ich würd das alles auch noch ein bissen einrücken und zusammenräumen, dann wirds klarer...
ich möchte ja eben nicht über das array hinüber zugreifen,sondern,wenn es voll ist,alles in ein neues kopieren..in diesem dürfte ja keine exception auftreten,da es doppel so lang ist...
Java:
publicvoidpush(finalint x)throwsException{//Oberste Element drauflegenif(count > a.length){// inhalt von a nach temp kopierenfor(int i =0; i < a.length;i++){
temp[i]= a[i];}}if(count < a.length){
count++;
a[count]= x;}if(count <-1)thrownewException();}
ok wenn es das aber trotzdem tut hast du einen fehler gemacht.
Also in der zeile wo der fehler fliegt vorher die länge das array und count ausgeben. Dann siehst du warum.
und einrücken!....
ach scheiß drauf, ich erbarme mich... moment....
das kompilier ja nicht mal.... ich würd eine IDE verwenden...
ok...
Java:
if(count < a.length){
count++;
a[count]= x;}
count = 9 und length = 10 (dh 0 bis 9)
ins if... count++ somit ist count 10, und du greifst mit a[10] zu was natürlich fliegt... weil dein feld nur von 0 bis 9 geht...
da ist dein fehler... ich reparier dir das aber nicht