Push_front push_back Verzweiflungs-Tat

#1

Hallo,

ich sitze an einem etwas größeren Problem: Ich möchte auch gar nicht großartig um den heißen Brei reden:
Ich muss eine Präsentation morgen halten zu einem Programm von dem ich so gut wie keine Ahnung habe. Ich weiß ungefähr was dahintersteckt, mehr aber auch nicht. Ich hoffe, dass das nicht ganz zu dreist rüberkommt…

Die Aufgabenstellung war:

Modifizieren Sie Ihre Implementierung aus Aufgabe 1 derart, dass bei der
push_front Methode die gleiche Reallokationsstrategie wie bei push_back
angewandt wird. Testen Sie, ob nach mehreren push_front Aufrufen der
Methodenaufruf get(0) das letzte mit push_front eingefügte Element
zurückliefert.

Die “Lösung” hatte er schonmal veröffentlicht:

 
 
interface SimpleCollection <T>{
    int size();
    void push_back(T arg);
    void push_front (T arg);
    T get(int i) throws OutOfBoundsException;
    void set(int i, T arg) throws OutOfBoundsException;
    void delete(int i) throws OutOfBoundsException ;
}
 
 
 
class MyVector<T> implements SimpleCollection <T>{
 
    int free_next;
    int increment;
    Object []obj;
 
 
    MyVector(int size, int realloc) {
        obj = new Object[size];
        increment = realloc;
        free_next=0;
    }
    MyVector(int size){
        this(size,0);
    }
    MyVector(){
        this(1);
    }
 
    public void resize(){
        Object []tmp_obj;
        if(increment==0){
            tmp_obj=new Object[obj.length*2];
        }
        else
            tmp_obj=new Object[obj.length+increment];
        obj=tmp_obj;
    }
 
    public int size(){
        return free_next;
    }
 
    public void push_front (T arg){
        if(free_next>=obj.length){
            resize();
        }
        Object tmp_obj[] = new Object[obj.length+1];
        for(int i=0;i<obj.length;++i){
            tmp_obj[i+1]=obj**;
        }
        tmp_obj[0]=arg;
        ++free_next;
        obj=tmp_obj;
    }
    public void push_back (T arg){
        if(free_next>=obj.length){
            resize();
        }
        obj[free_next++]=arg;
    }
    public T get(int i) throws OutOfBoundsException{
        if(i<=free_next && i>=0){
            return (T)obj**;
        }
        else
            throw new OutOfBoundsException();
    }
    public void set(int i, Object arg) throws OutOfBoundsException{
        if(i<=free_next && i>=0){
            obj**=arg;
        }
        else
            throw new OutOfBoundsException();
    }
    public void delete(int i) throws OutOfBoundsException {
        if(i<=free_next && i>=0){
            Object tmp_obj[] = new Object[free_next-1];
            for(int j=0;j<i;++j){
                tmp_obj[j]=obj[j];
            }
            for(int k=i+1;k<tmp_obj.length;++k){
                tmp_obj[k]=obj[k];
            }
        }
        else
            throw new OutOfBoundsException();
    }
    public void print() throws OutOfBoundsException{
        try{
        for(int i=0;i<size();++i)
            System.out.print(get(i) + "	");
        }catch(OutOfBoundsException e){
            System.out.println("zu weit");
        }
    }
}
 
 
 
public class uebung1_1 {
 
    public static void main(String[] args) {
        try{
            MyVector<Integer> m = new MyVector<Integer>(2,5);
            for(int i=0;i<76;++i){
                m.push_front(i);
            }
            System.out.println(m.get(0));
            m.print();
        }
        catch(OutOfBoundsException e){
            System.out.println("zu weit");
        }
    }
}```

Also, wichtig für mich ist der Teil mit der push-front und push-back methode. Was passiert da genau mit dem Vektor? Und was hat es mit der Ausgabe an sich?

Ich weiß, dass das vielleicht etwas dreist rüberkommt, ich habe aber nicht vor Programmierer zu werden, muss aber leider 3x eine Übung vorstellen um die CP zu erhalten.

Vielen Dank und Sorry nochmal!
#2

Ich hab dir meine Meinung schon im Java-Forum geschrieben. Bis morgen hast du sicher keine Antwort, die dir weiterhilft… :wink:

#3

Vor allem ist die Frage etwas unklar.

Was passiert da genau mit dem Vektor?

Es wird überprüft, ob er ein weiteres Element aufnehmen kann. Wenn nicht, wird er vergrößert. In jedem Fall werden alle Elemente um eins nach rechts verschoben, und das neue Element an stelle 0 eingefügt.