Eigene Stackklasse

eclipseworker

Bekanntes Mitglied
Ich soll fuer die Schule selbst einen Stack programmieren. Intern speicher ich das ganze als Object-Array:
Java:
import java.util.*;
/**
 * Beschreiben Sie hier die Klasse eclipseworkerStack.
 * 
 * @author (Ihr Name) 
 * @version (eine Versionsnummer oder ein Datum)
 */
public class eclipseworkerStack
{
    // Instanzvariablen - ersetzen Sie das folgende Beispiel mit Ihren Variablen
    private Object[] stack;
    private Scanner sc=new Scanner(System.in);
    private int erweiterungszaehler=0;

    /**
     * Konstruktor für Objekte der Klasse eclipseworkerStack, als leerer Array fixer Laenge.
     */
    public eclipseworkerStack(int laenge)
    {
        while(laenge<1){
            laenge=gibInt("Die Laenge muss groesser gleich 1 sein gibt sie erneut ein:");
        }
        stack=new Object[laenge];
    }
    
    /**
     * Konstruktor für Objekte der Klasse eclipseworkerStack mit einem Array.
     */
    public eclipseworkerStack(Object[] array)
    {
        stack=array;
    }
    
    public Object[] getStack(){
        return stack;
    }
    
    /**
     * Konstruktor für Objekte der Klasse eclipseworkerStack als null
     */
    public eclipseworkerStack()
    {
        stack=new eclipseworkerStack(1000).getStack();
    }
    
    public void add(Object[] array){
        for(int i=0; i<array.length; i++){
            add(array[i]);
        }
    }
    
    public void add(Object a){
        if(erweiterungszaehler<stack.length && stack[erweiterungszaehler]==null){
            stack[erweiterungszaehler]=a;
            erweiterungszaehler++;
        }else{
            int b=stack.length+1;//macht Sinn wegen der Methode add(Object[] array)
            Object[] newStack=new Object[b];
            for(int i=0; i<stack.length; i++){
                newStack[i]=stack[i];
            }
            newStack[stack.length]=a;
            stack=newStack;
        }
    }
    
    public Object get(int i){
        if(i<0 || !(i<stack.length)){
            return "Can't find object!";
        }
        return stack[i];
    }
    
    public Object[] get(int from, int to){
        if((from<0 || !(from<stack.length)) || (to<0 || !(to<stack.length)) || !(from<to)){
            String[] errorArray= new String[1];
            errorArray[0]="Can't find elements";
            return errorArray;
        }
        Object returnArray=new Object[to-from];
        for(int i=0; i<returnArray.length; i++){
            for(int j=from; j<=to; j++){
                returnArray[i]=stack[j];
            }
        }
        return returnArray;
    }

    /*
     *Der Benutzer wird zur auf der Konsole zur Eingabe eines Long aufgefordert, dieser wird zurueck gegeben.
     *@param auf: String
     *@return int 
     */
    private int gibInt(String auf){
        System.out.println(auf);
        while(sc.hasNext() && !sc.hasNextInt()){
            System.out.println("Fehler bei der Eingabe! "+auf);
            sc.next();
        }
        return sc.nextInt();
    }
}
Die Methode Object[] get(int from, int to) kompeliert aber nicht richtig weil "can't find returnArray.length" und "returnArray requieres ein Array". Da frage ich jetzt einfach hä?
 
Ist ein kleiner Schreibfehler. Du hast Deinen return-Array so definiert:
Java:
Object returnArray=new Object[to-from];
Du wolltest aber wahrscheinlich das machen:
Java:
Object[] returnArray=new Object[to-from];
 
Weil ein Array ein Object ist. ^^
Das nennt sich Polymorphie, du kannst Typen auf ihre Supertypen begrenzen. Damit du Methoden etc. benutzen kannst muss du aber einen Typ definieren, der diese Methoden bereits implementiert hat (direkt, Interface oder geerbt.)

Das ginge auch:

Java:
Object obj = "String";

Trotzdem geht das nicht:

Java:
obj.substring(0)
 

Zurück
Oben