Stapel

Status
Nicht offen für weitere Antworten.
C

Cryptonize

Gast
Hallo erst mal
Ich habe versucht eien Stapel (classe Stack) zu programieren.
Das Programm wird compaliert , aber mitten in der Programmausführung wird die ArrayIndexOutOfBoundsException ausgelößt . Ich kann mir nicht erklären warum.
Hier ist mein Code danke im Vorraus!
Code:
//Stack Stapel

import java.io.*;
import java.lang.*;
class Stackfunk{
    private int laenge;
    private int put = 0;
     
    private int stapel[]= new int[laenge];
        
         void daten(int groesse){
             laenge= groesse; 
               }
          void push(int eingabe){
              stapel[put]=eingabe;
              put++;
              return;
               }
          boolean pop(){
              stapel[put]=0;
              put--;
               System.out.println("Noch"+ put+" Elemente auf dem Stapel");
               if(put==0)
                 return false;
                else return true;
               }
          void anzeigen(){
            System.out.println("Der Stapel lautet:");
            System.out.println();
             for(int i=0;i<= stapel.length-1;i++)
                 {
                   System.out.println(i+" Pos:"+stapel[i] );
                 }
                return;
          }
          void beenden(){
            System.exit(0);
            }
          boolean check(){
            if(stapel[laenge] != 0)
              return false;
            else return true; 
               }          
  }
   class Stack{
    public static void main (String args[])
          throws java.io.IOException{
        int groesse=0;
        String zahleingabe="";
        int eingabe=0;
        char hilfseingabe;
         Stackfunk ob = new Stackfunk();
         BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Geben sie ein, mit wie viel Speicherplätzen der Stapel ausgestattet werden soll:");
        try{
           zahleingabe= in.readLine();
           }
        catch(IOException e){
            System.out.println("Fehler bei der Eingabe");
            System.exit(1);
            }
        //Umwandlung
              try{
           groesse=Integer.parseInt(zahleingabe);
                }
             catch(NumberFormatException n){
               System.out.println("Fehler überprüfen sie , ob sie auch eine Zahl eingegeben haben(ihre Eingabe: "+zahleingabe+" )");
               System.exit(1);
                }
            one:
           for(;;){          //Endlosschleife
             System.out.println("Was wollen sie machen?(1) Stapel füllen (2) Pos löschen (3) Stapel ausgeben (4) beenden");
                hilfseingabe= (char) System.in.read();



                 if(hilfseingabe=='1' && ob.check()){

                   try{
           zahleingabe= in.readLine();
           }
        catch(IOException e){
            System.out.println("Fehler bei der Eingabe");
            System.exit(1);
            }
        //Umwandlung
              try{
           eingabe=Integer.parseInt(zahleingabe);
                }
             catch(NumberFormatException n){
               System.out.println("Fehler überprüfen sie , ob sie auch eine Zahl eingegeben haben(ihre Eingabe: "+zahleingabe+" )");
               System.exit(1);
                }
       ob.push(eingabe);
       
       if(ob.check()){
          System.out.println("Stapel ist voll");
           continue one;
        } 

         if(hilfseingabe=='2'){
           
           if(ob.pop())
               continue one;
           else ob.pop();
             
             }
        if(hilfseingabe=='3'){ 
            ob.anzeigen();
            }
        if(hilfseingabe=='4'){
          ob.beenden();
             }
      }}}     }
 

ARadauer

Top Contributor
Code:
boolean check(){ 
		if(stapel[laenge] != 0) 
			return false; 
		else return true; 
	}
du hast dein array noch nicht inizialisiert, sprich du kannst nicht auf die stelle 0 (laenge) zugreifen -> out of Bound Excption

du machst zwar ein private int stapel[]= new int[laenge];
aber ganz am anfang und da ist laenge noch 0

erst aufrufen, wenn du weißt wie groß er werden soll,

... du liest zwar groesse aber du verwendest es nirgends...


also am besten nach groesse=Integer.parseInt(zahleingabe);
erzeugst du eine neue instanz von Stackfunk. Für Stackfunk machst du einen Konstruktor, dem du die Länge übergibst und darin rufst du dann stapel[]= new int[laenge]; auf...usw...
 

Pappenheimer++

Bekanntes Mitglied
hilfe, spaghetti-programmierung. zu deinem fehler: du hast zwar keinen konstruktor geschrieben (also wird der default verwendet), stattdessen hast du aber stehen:
Code:
    private int laenge;
    private int put = 0;
     
    private int stapel[]= new int[laenge];

Das bedeutet: wenn du ein objekt der klasse erzeugst, wird laenge mit 0 initialisiert und das array stapel[] wird mit der länge 0 initialisiert, d.h. es hat 0 elemente und ist damit leer. deshalb kannst du auch nichts reinschreiben geschweige denn rauslesen. ob sonst noch technische fehler drin sind, kann ich auf die schnelle nicht sehen.

EDIT: ich hab hier noch nen code, den kannste dir ja mal ansehen und ggf. anpassen/verwenden.
Code:
import java.lang.*;
class Stackfunk
	{
	private int pos = -1;
	private int[] stapel;

	public Stackfunk(int laenge)
	{
	     stapel=new int[laenge];
	}
	     
	void push(int eingabe)
	{
             if(pos<stapel.length-1)
                   stapel[++pos]=eingabe;
             else
                   System.out.println("Auf den Stapel passt nichts mehr drauf!");
	}
	
	boolean pop()
	{
              if(pos >=0)
                   stapel[pos--]=0;
               System.out.println("Noch "+(pos+1)+" Elemente auf dem Stapel");
               return(pos>=0);
	}
	       
          void anzeigen()
	  {
            System.out.println("Der Stapel lautet:");
            System.out.println("----------------");
             for(int i=0;i<= pos;i++)
                 {
                   System.out.println((i+1)+". Position von unten:"+stapel[i] );
                 }
              System.out.println("----------------");
          }

          boolean is_empty()
	  {
            return(pos==-1);
	  }         
  }
[/code]
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben