Push_front push_back

Ultramann

Mitglied
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:

Java:
class OutOfBoundsException extends Exception{}
 
 
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_prev;
    int free_next;
    int increment;
    Object []obj;
    
    
    MyVector(int size, int realloc) {
        obj = new Object[size];
        increment = realloc;
        free_next=0;
        free_prev=0;
    }
    MyVector(int size){
        this(size,0);
    }
    MyVector(){
        this(1);
    }
    
 
    
    public int size(){
        return free_next; 
    }
    
    public void push_front (T arg){
        if(free_prev<0){
            push_front_resize();
        }
        obj[free_prev--]=arg;
    }
    public void push_front_resize(){
        int more;
        int newSize; 
        if(increment == 0)
            more=obj.length;
        else
            more=increment;
        newSize=more+obj.length;
        Object[] tmp = new Object[newSize];
        for(int i = 0;i < obj.length;++i) {
            tmp[i+more] = obj[i];           
        }
        free_next+=more;
        free_prev+=more;
        obj = tmp;  
    }
    public void push_back (T arg){
        if(free_next>=obj.length){
            push_back_resize();
        }
        obj[free_next++]=arg;
    }
    public void push_back_resize(){
        int newSize;
        if(increment == 0)
            newSize=obj.length*2;
        else
            newSize=obj.length+increment;
        Object[] tmp = new Object[newSize]; 
        for(int i=0;i<obj.length;++i){
            tmp[i]=obj[i];
        }
        obj=tmp;    
    }
    public T get(int i) throws OutOfBoundsException{
        if(i<=free_next && i>=0){
            return (T)obj[i];
        }
        else
            throw new OutOfBoundsException();
    }       
    public void set(int i, Object arg) throws OutOfBoundsException{
        if(i<=free_next && i>=0){
            obj[i]=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) + "\t");
        }catch(OutOfBoundsException e){
            System.out.println("zu weit");
        }   
    }
}
 
 
 
public class uebung1_2 {
    
    public static void main(String[] args) {
        try{
            MyVector<Integer> m = new MyVector<Integer>(2,5);
            for(int i=0;i<2;++i){
                m.push_front(i);
            }
            for(int j=0;j<5;++j){
                m.push_back(j);
            }   
            System.out.println(m.get(0));
            m.print();
        }
        catch(OutOfBoundsException e){
            System.out.println("zu weit");
        }   
    }
}


Der Compiler gibt mir folgendes aus:

null
null null null null 1 0 1 2 3 4



Was genau hat es mit dem "null" auf sich?
Und nochmal meine Frage von vorhin:
Wo im Quelltext wird sichergestellt, dass nach den push_front Aufrufen der
Methodenaufruf get(0) das letzte mit push_front eingefügte Element
zurückliefert?

Das wären so die zwei wichtigsten Dinge, die ich wissen müsste.

Vielen Dank im Voraus!!

Und sorry für die doppelten Threads, hatte mich bei dem ersten vertan... Ich brauche bis morgen soviel Input wie nur möglich. Sorry dafür.
 

Jango

Gesperrter Benutzer
Ich bin kein/e Freund/in von Klischee's ala 'Ich hab von nichts ne Ahnung und muss morgen alles abgeben', aber irgendwie muss man es ja erklärt haben - keiner wirft dich ins kalte Wasser und sagt: Mach mal, ohne dir vorher zu sagen wie... ;)

Post's in mehreren Foren helfen dir da auch nichts. Wir im 'Byte-Welt' orientieren uns auch hier und die meisten Benutzer, Mods und Admins sind auch hier tätig (wie ich z.B.).

Vorher lernen! 'Morgen muss alles passen' - so funktioniert's nicht!

Just my one cent...
 

Ultramann

Mitglied
Mit so einer Antwort habe ich gerechnet. Aber immerhin eine Antwort.

Ich bin in einem stark mediendesignorientieren Studiengang und muss mich durch diese Programmieraufgaben quälen (ich weiß, dass ich mich so hier nicht beliebt mache :) ).
Leider wurde genau ein Semester nach mir erst der Studiengang umstrukturiert, dass heißt ich bin einer der letzten Studenten, die Informatik und Mathe bestehen müssen.
Im neuen Studiengang gibt es diese Module nicht mehr, da eingesehen wurde, dass das für "uns" keinen Zweck macht und da auch eingesehen wurde, dass die hohe Abbrecherrate und Durchfallquote genau an diesen beiden Mosulen lag.
So. Man mag das jetzt als Erklärung oder Entschuldigung auffassen. Wie jeder möchte.
Ich bin selber kein Freund von solchen Threads, aber ich denke das spiegelt meine Verzweiflung und Bereitschaft mich zum Horst zu machen wider.


Ich möchte morgen lediglich dem guten Mann den Wisch zeigen und wenn er dann eine Frage hat nicht gaaannz soooo blöde dastehen.
Und wenn mir da jemand weiterhelfen kann, bin ich dieser Person auf ewig dankbar.

Im Thread vorher hat mir ein netter User ja auch helfen können.


Also sorry für alle Unannehmlichkeiten und ich bin für jede Hilfe dankbar.
 

Ultramann

Mitglied
Ok, hier scheint nicht mehr viel zu kommen. Mit Sicherheit auch durch die 2 Posts vorher.
Bin ich halt eine schlechte Strategie gefahren.

Vielleicht erbarmt sich ja noch jemand. Ich werde bis heute Mitternacht immer wieder hier reinschauen.
Dem oder der wasche ich dann mehr als nur die Füße.

Und falls tatsächlich noch ein bißchen Hilfe kommt, werde ich morgen auf jeden Fall posten wie's gelaufen ist. Falls es jemanden interessiert.
 
H

hüteüberhüte

Gast
1. Dein Post steht im Forum relativ weit unten,
2. liegt in der Kürze die Würze.

Hätte mal eine Frage dazu: Um welche Datenstruktur geht es hierbei überhaupt?

null kann ausgegeben werden, wenn eine Objekt- oder Referenzvariable keinen Inhalt hat. Mehr kann ich so auf die Schnelle/so pauschal nicht sagen.

Nur wiederholtes Bitten und Betteln zu lesen, macht keinen Spaß
 

Ultramann

Mitglied
Ach, kagge. Kein Plan was das für'ne Datenstruktur ist. Ich habe doch geschrieben, dass der Prof die Lösung online gestellt hatte. Das ganze entsprang leider nicht meinem Hirn. Sonst würde ich mich hier doch nicht so beliebt machen und fragen, wie das Programm funktioniert.

Danke für die Erklärung zu "null".
 
H

hüteüberhüte

Gast
Geht es dabei um eine verkettete Liste oder double ended queue? Wird das "nächste Element" in einer Variable oder in einem Array gespeichert? Naja, vielleicht auch schon zu spät jetzt

Edit: Ich glaub ich kenne Jango, :D
 
Zuletzt bearbeitet von einem Moderator:

Neue Themen


Oben