KlausurÜbung- Förderband-Linked List

Trümmermacher

Bekanntes Mitglied
Hi Leute , ich habe eine Klausuraufgabe und wollte wissen ob ich auf dem richtigen Weg bin wenn ich das Förderband als LinkedList erstelle ???

Im Anhang die Klausur Aufgabe
 

Anhänge

  • 14407875_1397308436965006_1356583868_o.jpg
    14407875_1397308436965006_1356583868_o.jpg
    153,9 KB · Aufrufe: 87

stg

Top Contributor
Selten so eine schlecht gestellte Aufgabe gelesen, vieles ist vollkommen unklar, um die Aufgabe sinnvoll lösen zu können, ohne groß zu raten, was der Aufgabensteller gemeint haben könnte.

Aber gut ... das Förderband wird sicher als eine Art LinkedList implementieren zu sein, das ist schon mal richtig.
 

Trümmermacher

Bekanntes Mitglied
Ja das sagen alle unser Prof stellt wirklich die beschissensten Aufgaben in keiner Uni Klausur finde ich solche Aufgaben :D

Aber danke schonmal dann bin ich ja auf dem richttigen Weg
 

thomasbomme

Mitglied
ehrlichgesagt kennt man sich bei der Aufgabe garnicht wirklich aus was man machen soll :eek:
bei uns an der Uni sind die Aufgaben 1000x besser gestellt
 

Trümmermacher

Bekanntes Mitglied
Hehe ich sollte mein Profs mal die Post zeigen damit er einsieht was Ihm andauernd gesagt wird .

Also für mich ist die Frage wie groß soll dieses Förderband sein. Ich würde jetzt einfach eine DoubleLinked List machen und bei der add methode ein buch drauf legen und wenn eins hinzukommt das erste buch weiterschieben und das neue buch kommt auf den ersten platz .

Was meint ihr????
 

Flown

Administrator
Mitarbeiter
Wenn du die vollständige Klausur mit der ganzen Seite lesbar hochladen würdest, dann wäre es für uns auch etwas leichter.
 

Meniskusschaden

Top Contributor
Hm, ist doch eine schöne Aufgabe. Verstehe gar nicht, warum die so kritisiert wird.
Also für mich ist die Frage wie groß soll dieses Förderband sein.
Warum ist das wichtig? Das "reale" Förderband müsste wohl 27 Plätze umfassen (26 Buchstaben plus 1 Platz zum Auflegen). Die Liste würde maximal 26 Elemente umfassen, weil man den Auflageplatz ja nicht wirklich vorhalten muß.
Ich würde jetzt einfach eine DoubleLinked List machen und bei der add methode ein buch drauf legen und wenn eins hinzukommt das erste buch weiterschieben und das neue buch kommt auf den ersten platz .
Wobei das Weiterschieben bei einer Liste ja automatisch funktioniert, wenn man vorne einfügt. Man muß sich hier eher beim Entfernen überlegen, wie man es richtig macht.
 

Trümmermacher

Bekanntes Mitglied
Also ich hänge die ganze Zeit vor der Aufgabe und komme einfach nicht drauf wie ich anfangen soll ich weiss was ich machen will aber irgendwie fehlt mir der Code dazu kann mir vielleicht jemand ne STARTHILFE geben wäre super ..
 

Trümmermacher

Bekanntes Mitglied
Also ich würde jetzt einfache eine Linked List erstellen dann muss ich ja nicht mehr viel machen nur mit add immer wieder ein Buch der Liste(Förderband)hinzufügen das alte rutscht ja automatisch einen Platz auf oder ????
 

Trümmermacher

Bekanntes Mitglied
mein Code bisher die Aufgabe a und b wär damit abgeschlossen , oder???

Code:
import java.util.LinkedList;

public class Conveyor {
   
private final LinkedList<Book> förderband;
   
    public  Conveyor() {
         
             förderband= new LinkedList<>();
        
           
          }
        
       
   
   
        public void addBook(Book book){
            förderband.add(book);
           
         }
    public class Book{
        public String title;
        public Book(String title){
           
        }
    }
}
 
X

Xyz1

Gast
1.-) Warum ist das nicht privat?
2.-) Mir ist das viel zu lange, hätte TL;DR druntergeschrieben und hätte schnell weggegangen.
3.-) Dann musst du aber auch mit Konsequenzen rechnen.
4.-) Was sollen wir jetzt machen? Wie solls weitergehen? Sollen wir die nicht abphotographierten Wörter auf der linken Seite raten?

Du könntest Ergänzen und Abtippen und alles in [spoiler="Klausurübung:"][code]....[/code][/spoiler] Einfügen...
 

AndiE

Top Contributor
Ich denke, die Aufgabe hat es in sich. Ich finde die Idee mit LinkedList gut. Ich möchte aber anmerken, das leere Förderband hat 27 leere Elemente, eine leere Liste aber kein Element. Es wird "Alladin" schon nach einem Takt, "Harry Potter" nach acht und "Zum blauen Kranze" erst nach sechsundzwanzig Takten vom Band genommen. Wenn Bücher entnommen werden, schrumpft ja nicht die Länge des Förderbandes, sondern der Platz wird leer. ich finde, eine einfache Übernahme der Methoden der verlinkten Liste löst die Aufgabe nicht.
 

stg

Top Contributor
mein Code bisher die Aufgabe a und b wär damit abgeschlossen , oder???

Nein, du darfst die LinkedList aus der Java API natürlich nicht verwenden. Du musst die Liste (jedenfalls soweit, wie hier benötigt) schon selbst implementieren.

Ich glaube nicht. Zumindest nicht bei dem Lösungsansatz, den ich sehe. Ich denke, wenn du mal ein Buch vom Förderband entfernst, wirst du mit deinem Ansatz auf ein Problem stossen. Das wirst du bei der Lösung von c und d aber wahrscheinlich merken.

Listen können ja auch NULL aufnehmen. Mit einer "Standard-Liste" wäre das Problem durchaus zu lösen, wenn es denn erlaubt wäre.

Habe eben beim Joggen noch einmal darüber nachgedacht und finde jetzt, dass es durchaus gute Lösungen gibt, bei denen man die Grösse kennen muß.

Die Länge des Förderbandes muss man wirklich nicht unbedingt wissen. Es reicht eigentlich aus zu wissen, wie viele Bücherregale es gibt, und das ist eine bekannte Konstante.


Hm, ist doch eine schöne Aufgabe. Verstehe gar nicht, warum die so kritisiert wird.
Sehe ich auch so. Steht doch alles da was man wissen muss und der Rest ist Eigenleistung. Und es gibt sicher mehrere Wege zum Ziel. Aber was ist daran schlecht ?

Meine erste Aussage war vielleicht ein wenig zu übereilt und zu forsch, dennoch bleibe ich dabei, dass die Aufgabe ungünstig gestellt wurde, da sie einfach Interpretationsspielraum lässt. Im Aufgabentext heißt es zunächst, dass nach dem Auflegen eines Buches immer "geprüft und einsortiert" werden soll. Da wir sowohl nur eine begrenzte (konstante) Anzahl an Regalen, als auch eine durch die Anzahl an Regalen nach oben beschränkte maximale Anzahl an Büchern auf dem Band, ist es auch kein Problem diese add-Methode in konstanter Laufzeit zu implementieren. Dies setzt natürlich vorraus, dass das Band von keiner anderen Stelle maßgeblich geändert werden kann und auch zu Beginn bereits ein konsistenter Zustand gegeben ist. Was soll dann aber die öffentlich sort-Methode machen? Was ist n? In welcher Größe wächst hier die Komplexität das Problems? In der Anzahl an Regalen oder Büchern? Wir haben ja eben sogar überlegt, dass das einsortieren in jedem "add"-Schritt in konstanter Zeit möglich ist. Sonst wäre es ja auch gar nicht möglich, die add-Methode in konstanter Zeit zu implementieren. Die öffentliche sort-Methode macht dann aber keinen Sinn mehr, weil ja nach jedem add-Schritt bereits alles entsprechend einsortiert wurde. Es liegt nach außen also niemals ein Zustand vor, in dem der Aufruf der sort-Methode etwas bringen könnte.
Anders würde es aussehen, wenn add wirklich nur Bücher aufs Band legen soll und anschließend der Client die sort-Methode aufruft. Dann müsste man aber berücksichtigen, dass auch Zustände des Förderbands existieren, bei dem ein Buch bereits an seinem Regal "vorbeigelaufen" ist. Und ebenfalls, dass die Länge des Förderbands nicht mehr beschränkt ist. Dann macht es auch Sinn sich zu fragen, wie eine wachsende Anzahl an Büchern auf die Komplexität des Problems auswirkt. Das ließe sich sogar in linearer Zeit realisieren, aber ich würde drauf wetten, dass das nicht dem entspricht, was der Aufgabensteller im Sinn hatte.
 

Meniskusschaden

Top Contributor
Nein, du darfst die LinkedList aus der Java API natürlich nicht verwenden. Du musst die Liste (jedenfalls soweit, wie hier benötigt) schon selbst implementieren.
Das kann gut sein, obwohl ich es der Aufgabenstellung nicht entnehmen konnte. Da steht doch nur, dass Arrays verboten sind. Bei der Nutzung von LinkedList o.ä. aus dem API sehe ich eher das Problem, wirklich zu garantieren, dass man die Laufzeitbedingungen einhält (siehe nächster Punkt).
Listen können ja auch NULL aufnehmen. Mit einer "Standard-Liste" wäre das Problem durchaus zu lösen, wenn es denn erlaubt wäre.
Ja, das stimmt. Allerdings könnte es bei der "Standard-Liste" schwierig werden, das Buch gegen NULL zu tauschen, denn vermutlich kostet ein einzelner Tausch mitten in der Liste bereits O(n). Man bekommt es zwar trotzdem hin, aber ich glaube, es wird komplizierter als nötig. Bei einer selbst programmierten Datenstruktur sehe ich das Problem aber auch nicht.

Was die Kritik der Aufgabenstelluing angeht, kann ich einige deiner Argumente schon nachvollziehen, komme insgesamt aber trotzdem zu einer positiven Bewertung. Ich sehe es so, dass man auf diesem Schwierigkeitsniveau beim Realitätsbezug Abstriche machen muß. Als ich die Aufgabenstellung gelesen habe, hat mir am meisten Schwierigkeiten gemacht, dass sort public ist, was du ja auch kritisiert hast. Ich habe es mir wie folgt erklärt und finde die Sichtweise relativ plausibel:
Die ersten beiden Absätze beschreiben nicht die Software, sondern das Verhalten der Sortieranlage als Gesamtsystem. Damit ist also noch nicht gesagt, dass nach dem Aufruf von add_book() schon alles erledigt ist, sondern nur, dass ein Auflegen des Buches, letztendlich diese Folgen haben wird.

Das Gesamtsystem könnte so arbeiten:
Wenn ein Buch aufgelegt wird, bemerkt das ein Sensor der Anlage. Die Anlage erkennt das Buch anhand irgendeiner erfassbaren Codierung (Barcode, RFID, ...) und ruft add_book() mit diesen Informationen auf, um die Software über dieses Ereignis zu informieren. Ausserdem startet die Anlage die Motoren der Fördertechnik.
Sobald das Förderband einen Platz vorgefahren ist, stoppt die Anlage die Motoren und ruft die Methode sort() auf. Dadurch kommt es zu Aufrufen von insertBook(), was bewirkt, dass der Entnahmemechanismus an den betreffenden Plätzen angesteuert wird.

In dem Szenario wäre die Anlage für die korrekten Aufrufe zuständig. Ich glaube, das ist auch eine sinnvolle Aufteilung der Zuständigkeiten, denn solche Anlagen wissen ja, welches Ereignis gerade stattfindet, während die Software weiß, wo welches Buch hingehört. Falls die Anlage dennoch fehlerhaft arbeitet, könnte die Software sicher einige dieser Fehler erkennen, aber kaum Fehler beheben, sondern nur alarmieren oder die Arbeit einstellen. Das übersteigt aber sicher den Rahmen der Aufgabenstellung.

Übrigens finde ich die Aufgabe - trotz einiger Vereinfachungen - ziemlich praxisrelevant, weil man sich beim Entwurf eines solchen Systems ja wirklich viele Gedanken über das Zusammenspiel der beiden Welten machen muß. Es kommt beispielsweise in Industriebetrieben sicher ziemlich häufig vor, dass die Verantwortlichen des ERP-Systems mit den Verantworlichen der Produktionsanlagen gemeinsame Lösungen finden müssen.
 
X

Xyz1

Gast
Das gibt's doch nicht! Die Zeile steht ja sogar in einem eigenen Absatz. Wie konnte ich die denn trotzdem übersehen?:(

Ich sag doch, viel zu lang, um ihm das mal eben grad zu machen.

Keine Weiteren kann aber auch bedeuten, keine bis auf endlich viele.

Oder anders gesagt, vielleicht steht irgendwo, dass LL benutzt werden darf.

Das hab ich aber nicht komplett gelesen, da, wie gesagt, TL;DR.

Aber ein Förderband hat Länge fest und kann ein Elem. in einem "Slot" beinhalten - oder auch leer sein. Das ist logisch. Und n ist natürlich die Länge des Bands - was denn sonst? Ihr seid doch nicht begriffsstutzig - oder? Und mal ganz kurz angerissen: O(1) - Entnehme am Anfang oder Ende des Bands, O(n) - Entnehme von irgendwo auf dem Band. Logisch logisch logisch. Als könntet ihr nicht nachdenken. :D
 

Trümmermacher

Bekanntes Mitglied
Da steht das nur Klassen aus der Referenz API importiert weden darf und das ist java -collections und von daher glaube ich schon das ich die Linked List importieren darf.


Wenn ihr schon so heiß disktuiert was wäre denn euer Lösungsansatz .

BRAUCHE DAS WIRKLICH FÜR DIE KLAUSUR ZUM ÜBEN BIN ÜBER JEDE HILFE DANKBAR
 

stg

Top Contributor
Da steht das nur Klassen aus der Referenz API importiert weden darf und das ist java -collections und von daher glaube ich schon das ich die Linked List importieren darf.

Wo steht, dass du aus der Referenz API importieren darfst? Was soll das überhaupt sein? Und die LinkedList liegt übrgens im package java.util...

Wenn ihr schon so heiß disktuiert was wäre denn euer Lösungsansatz .
BRAUCHE DAS WIRKLICH FÜR DIE KLAUSUR ZUM ÜBEN BIN ÜBER JEDE HILFE DANKBAR

Schreib die "Liste" doch einfach selbst, das ist in 3 Minuten erledigt, wenn man verstanden hat, wie so eine Liste funktioniert. Du musst ja auch gar keine vollwertge Liste implementieren, sondern nur den Teil, den du für die Lösung der Aufgabenstellung brauchst. Daher ja auch die Anmerkung "so eine Art LinkedList" aus meiner ersten Anwort.
 

Trümmermacher

Bekanntes Mitglied
Ich würde es jetzt ungefähr so machen .. ist wahrscheinlich was fehlerhaft aber weg ist richtig denke ich.

Ein Fehler ist klar ich kann das Objekt buch nicht dem FörderElement hinzufügen.

Kann mir da jemand weiterhelfen

Code:
public class Conveyor {
  

  private FörderElement first;
 
    public Conveyor() {
        
           
       
          
          }
       
      
  
  
        public void addBook(Book book){
           FörderElement neuesBuch = new FörderElement(book);
           neuesBuch.setNext(first);
           first=neuesBuch;
          
         }
    public class Book{
        public String title;
        public Book(String title){
          
        }
    }
    public class FörderElement {

        private String Platz;
        private FörderElement next;
       
        public FörderElement(String Platz) {
            this.Platz = Platz;
        }

        public String getPlatz() {
            return Platz;
        }

        public FörderElement getNext() {
            return next;
        }

        public void setNext(FörderElement next) {
            this.next = next;
        }
    }
}
 

Trümmermacher

Bekanntes Mitglied
@stg ja das weiss ich auch aber wie kann ich den am besten das Book dem FörderElement zu weisen.

Eine kleine Hilfe wär nett . Sollte ich am Beste dem Förderelement direkt Book als zusätzliche Instanz geben???
 

Trümmermacher

Bekanntes Mitglied
Habs jetzt so gemacht .Ist das richtig was sagt Ihr????

Code:
public class Conveyor {
  

  private FörderElement first;
 
    public Conveyor() {
        
           
       
          
          }
               public void addBook(Book book){
           FörderElement neuesBuch = new FörderElement(book);
           neuesBuch.setNext(first);
           first=neuesBuch;
          
         }
    public class Book{
        public String title;
        public Book(String title){
          
        }
    }
    public class FörderElement {

        private Book Platz;
        private FörderElement next;
       
        public FörderElement(Book Platz) {
            this.Platz = Platz;
        }

        public Book getPlatz() {
            return Platz;
        }

        public FörderElement getNext() {
            return next;
        }

        public void setNext(FörderElement next) {
            this.next = next;
        }
    }
}
 

AndiE

Top Contributor
Weiß jemand, wie das mit dem "public void sort(Shelf[] shelfs)" gemeint ist? Im Text steht, dass diese Funktion die Bücher vom Band nimmt. OK- aber was steht dann in "shelfs"? Und wenn in "shelfs" eine Sammlung der Positionen steht, wo Bücher entnommen werden sollen, was soll die Funktion dann machen? Soll sie nur ausgeben" Buch an Position X entnommen" ?
 

Meniskusschaden

Top Contributor
Ist das richtig was sagt Ihr????
Warum testest du es nicht einfach?;)

Du hast eine innere Klasse Book erstellt. Die Aufgabenstellung enthält jedoch bereits eine Klasse Book. Außerdem ist der Methodenname addBook falsch. Ansonsten sollte es aber funktionieren. Ich würde aber die Variablennamen überdenken. Es ist verwirrend, wenn eine Variable z.B. neuesBuch heisst, obwohl sie auf ein FörderElement verweist.
 

Meniskusschaden

Top Contributor
Weiß jemand, wie das mit dem "public void sort(Shelf[] shelfs)" gemeint ist? Im Text steht, dass diese Funktion die Bücher vom Band nimmt. OK- aber was steht dann in "shelfs"? Und wenn in "shelfs" eine Sammlung der Positionen steht, wo Bücher entnommen werden sollen, was soll die Funktion dann machen? Soll sie nur ausgeben" Buch an Position X entnommen" ?
Ich würde sagen, die Methode sort() entnimmt Bücher vom Förderband und legt sie in die Regale, die im Array shelves gespeichert sind. Ein Array-Eintrag repräsentiert ein Regal.
 

AndiE

Top Contributor
Ich habe die Aufgabe schon teilweise gelöst, und mein Code sieht ganz anders aus. Natürlich poste ich ihn nicht, das wäre ja langweilig. Ich kann aber versuchen, mein Vorgehen zu erklären. Ich finde, ein Förderband hat immer N Datenelemente. Lege ich etwas auf ein Förderband, kommt KEIN Datenelement hinzu, sondern der STATUS des Datenelementes ändert sich. Hier ist für mich der entscheidende Unterschied zu Liste. Eine leere Liste hat kein Datenelement und das Hinzufügen eines Datenelementes verlängert auch die Liste. Ich habe als erstes implementiert, dass sich nach Auflegen dreier Bücher das Förderband so verhält, dass drei Plätze mit den Büchern belegt sind, und alle anderen Plätze des Förderbandes leer sind. Die Frage, ob das Buch an der richtigen Stelle liegt, lässt sich auch recht einfach dabei lösen.
 

Trümmermacher

Bekanntes Mitglied
Aber es soll ja immer nur ein Buch aufgelegt werden und dann soll das förderband einen platz nach vorne laufen. DAs mit den n elementen ist eine gute Idee aber dasmit den drei büchern wär aufjedenfall nicht das was bei der Aufgabe verlangt wird.

Ich würde mich aber sehr freuen wenn du deinen Code posten würdest da ich morgen nachmittag meine Klausur habe und das die einzige Aufgabe ist die ich bisher nicht gelöst habe
 

Trümmermacher

Bekanntes Mitglied
meine Version mit nItems
Code:
public class Conveyor {
    

      private FörderElement first;
     int nItems;
        public Conveyor() {
            this.first = null;
            this.nItems = 0;
             
         
            
              }
                   public void addBook(Book book){
               FörderElement neuesBuch = new FörderElement(book);
               neuesBuch.setNext(first);
               first=neuesBuch;
            
             }
        public class Book{
            public String title;
            public Book(String title){
            
            }
        }
        public class FörderElement {

            private Book Platz;
            private FörderElement next;
         
            public FörderElement(Book Platz) {
                this.Platz = Platz;
            }

            public Book getPlatz() {
                return Platz;
            }

            public FörderElement getNext() {
                return next;
            }

            public void setNext(FörderElement next) {
                this.next = next;
            }
        }
    }

hier nochmal eine abgeänderte Art der addMethode
Code:
       public void addBook(Book book){
               FörderElement neuesBuch = new FörderElement(book);
               if(first==null)
                   first= neuesBuch;
               if(first!=null)
               neuesBuch.setNext(first);
               first=neuesBuch;
             
             }
 
Zuletzt bearbeitet:

AndiE

Top Contributor
Java:
package library;

public class Storage {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Conveyor c= new Conveyor();
        Book b1= new Book("Alladin");
        c.add_book(b1);
        Book b2= new Book("HarryPotter");
        c.add_book(b2);
        Book b3= new Book("Zum grünen Kranze");
        c.add_book(b3);
    }

}
Java:
package library;

import java.util.LinkedList;

public class Conveyor {
   
    LinkedList<Book> chain;
    int LENGTH=26;
   
   
   
    public Conveyor(){
        chain= new LinkedList<Book>();
        int i;
        for (i=0;i<LENGTH;i++){
            Book b= new Book("empty");
            chain.add(b);
        }
    }
   
    /**
     *
     * @param book
     * add a book
     */
    public void add_book(Book book){
        //Insert book on end of List
        chain.add(book);
        //delete book at begin of list
        chain.remove();
        //check books on chain
        int i=0;
        for( Book b : chain){
            System.out.print(b.title+".");
            String t= b.title;
            Boolean push= check(t.charAt(0),i);
            if(push){
                System.out.print("t ");
            }
            else{
                System.out.print("f ");
            }           
           
        }
        System.out.println("\nTakt abgeschlossen");
    }
   
    /**
     *
     * @param first_letter
     * @param index
     * @return
     * is index the same as the first letter of the book
     */
   
    public boolean check(char first_letter,int index){
        return false;
    }

    /**
     *
     * @param shelfs
     *
     * Insert the books to the shelfs
     */
    public void sort(Shelf[] shelfs){
       
    }
   
}
Das ist meine Idee. ich denke, der Quelltext ist weitgehend selbsterklärend.
 
X

Xyz1

Gast
Nun hab ich es auch mal durchexerziert, das ist das Ergebnis:
Java:
/**
* @author
*/
public class JavaApplication5 {

    public static void main(String[] args) {
        Shelf[] shelfs = new Shelf['z' - 'a' + 1];
        for (int i = 0; i < shelfs.length; i++) {
            shelfs[i] = new Shelf();
        }
        Conveyor conve = new Conveyor();
        conve.add_book(new Book("h wie habicht"));
        conve.add_book(new Book("hormone natürlich regulieren"));
        conve.add_book(new Book("hypovolämischer schock"));
        conve.add_book(new Book("hüftchirurgie"));
        conve.add_book(new Book("herausforderung motivation: denkpräferenzen und ihr einfluss auf engagement und handeln im beruf"));
        conve.sort(shelfs);
        System.out.println(shelfs[7].llb); // Debug
        System.out.println("");
        System.out.println(shelfs[7].get_book("hüftchirurgie").title);
        System.out.println("");
        System.out.println(shelfs[7].llb); // Debug
    }
}

class Book {

    String title;

    Book(String title) {
        this.title = title;
    }

    @Override
    public boolean equals(Object obj) {
        return this.title.equalsIgnoreCase(((Book) obj).title);
    }

}

class Shelf {

    LinkedList<Book> llb = new LinkedList<>();

    Shelf() {

    }

    void insert_book(Book book) {
        llb.add(book);
    }

    Book get_book(String title) {
        return llb.remove(llb.indexOf(new Book(title)));
    }
}

class Conveyor {

    LinkedList<Book> llb = new LinkedList<>();

    Conveyor() {
        for (char c = 'a'; c <= 'z'; c++) {
            llb.add(null);
        }
    }

    void add_book(Book book) {
        llb.removeLast();
        llb.addFirst(book);
    }

    boolean check(char first_letter, int index) {
        return first_letter - 'a' == index;
    }

    void sort(Shelf[] shelfs) {
        for (int i = 0; i < llb.size(); i++) {
            Book b = llb.removeLast();
            llb.addFirst(null);
            if (b != null) {
                for (int j = 0; j < shelfs.length; j++) {
                    if (check(b.title.charAt(0), j)) {
                        shelfs[j].insert_book(b);
                    }
                }
            }
        }
    }
}

Mir sind einige Dinge aufgefallen, die nicht sinnvoll erscheinen,
du sollst ja nur Conveyor, add_book, check und sort implementieren,
wie lang ist dieses Förderband?,
was passiert, wenn es voll ist?,
Bücher fallen hinten weg?,
das Förderband kann "einmal komplett gedreht werden" in O (n),
aber in O (n) kann ich nicht alle Bücher einsortieren,
siehe Schleife in einer Schleife.

Keine weiteren Kallsen importieren, das hab ich ignoriert... :rolleyes:

Ich hab ne Idee, zeichne dieses Förderband mit den Regalen einmal räumlich auf! Dann wissen wir alle, was gemeint ist, ohne Raten. :oops:
 

Meniskusschaden

Top Contributor
Laut Aufgabenstellung soll auf jedes add_book() ein sort() folgen, bevor das nächste add_book() aufgerufen wird. Deshalb kann das:
was passiert, wenn es voll ist?,
Bücher fallen hinten weg?,
nicht passieren (zumindest nicht, solange die Bücher keine seltsamen Anfangszeichen haben;)).
aber in O (n) kann ich nicht alle Bücher einsortieren,
siehe Schleife in einer Schleife.
Auf die innere Schleife kann man ja verzichten, wenn man die Prüfung bereits in der äußeren Schleife vornimmt.
 
X

Xyz1

Gast
Laut Aufgabenstellung soll auf jedes add_book() ein sort() folgen, bevor das nächste add_book() aufgerufen wird. Deshalb kann das: nicht passieren (zumindest nicht, solange die Bücher keine seltsamen Anfangszeichen haben;)).

Das hab ich nirgendwo gelesen, das ist ein völlig neuer Aspekt. Dann können Buch in O (n) einsortiert werden, indem einmal an den Regalen langgerattert wird!

Das ist ein völlig neuer Aspekt. Dann hat das Förderband nur 1 Platz!!! Und ist mehr ein Schiebearm.

Dann brauchts auch LinkedList nicht.

Das hättest du auch mal eher aufklären können.
 

Meniskusschaden

Top Contributor
Das hab ich nirgendwo gelesen, das ist ein völlig neuer Aspekt. Dann können Buch in O (n) einsortiert werden, indem einmal an den Regalen langgerattert wird!
Virtuell kann man das zwar machen, aber das "echte" Förderband bewegt sich für ein add_book() nur um eine Position weiter.
Das ist ein völlig neuer Aspekt. Dann hat das Förderband nur 1 Platz!!! Und ist mehr ein Schiebearm.
Aus dem Grund im vorigen Absatz braucht man deshalb dann doch 26 oder 27 Plätze.
 
X

Xyz1

Gast
Zeichne das doch mal auf!!!
Code:
Regal 'A', Regal 'B', Regal 'C'   <--- Shelfs
=>________ Blut...___ _________=> <--- Förderband (mit 1 Buch)

// es fährt in O(n) einmal "an allen Regalen entlang", bis das Buch beim richtigen Regal ist???
 

Meniskusschaden

Top Contributor
Okay, habe mal versucht, es im Anhang darzustellen. Die Regale sind waagerecht eingezeichnet (mit der Bücherbestückung nach dem letzten Takt) und die senkrechten Elemente stellen das Förderband im Zeitverlauf für die ersten sieben Takte dar.
 

Anhänge

  • Förderband.png
    Förderband.png
    10,6 KB · Aufrufe: 30
X

Xyz1

Gast
Dann kann wieder nicht in O (n) einsortiert werden, da ich jedes Regal ja mal ansteuern muss mit "check".

Also das Band läuft einmal an allen Regalen entlang? Dann muss ich in jedem Schritt auch jedes Regal "checken".

Naja, das Thema verwirrt mich, ich bin draußen. :D
 

Meniskusschaden

Top Contributor
Dann kann wieder nicht in O (n) einsortiert werden, da ich jedes Regal ja mal ansteuern muss mit "check"
Aber das reicht doch auch. check() braucht ja nur O(1).
Also das Band läuft einmal an allen Regalen entlang? Dann muss ich in jedem Schritt auch jedes Regal "checken".
Ja, aber pro Auflegeaktion eben nur einen Schritt. Wenn man keine weiteren Bücher mehr auflegt, bleibt es stehen - auch falls es noch nicht leer ist.
 

AndiE

Top Contributor
Vielleicht ist damit auch gemeint, dass, wenn ich 26 Bücher von Z beginnend bis A auf das Laufband lege, 25 mal für jedes Regal ein Check ausgeführt wird, ohne dass ein Buch entfernt wird. Erst beim 26. Schritt liegen alle Bücher richtig und werden nach wiederum 26 Checks alle zusammen vom Band genommen.
 
X

Xyz1

Gast
Eine Sache ist unklar, ich muss erst das Band weiterbewegen und dann ein neues Buch auflegen. In der Aufgabenstellung steht aber:
Wird ein neues Buch , bewegt sich das Förderband vorwärts und alle Bücher wandern genau einen Regalplatz .
Wenn ich es danach weiterbewege, und zum Beispiel A wie Anton aufgelegt wird, verpasse ich ja das erste Regal mit 'A'.
Und es stimmt, nach jeder Bewegung wird für jedes Regal/Buch geprüft, ob es an der richtigen Stelle ist, und dann ggf. vom Band genommen - das kann natürlich in O (n) geschehen. Alle Bücher einsortieren, die auf dem Band an der falschen Stelle sind, hingegen nich!!!! :rolleyes:
 

Meniskusschaden

Top Contributor
Eine Sache ist unklar, ich muss erst das Band weiterbewegen und dann ein neues Buch auflegen. In der Aufgabenstellung steht aber:
Wird ein neues Buch , bewegt sich das Förderband vorwärts und alle Bücher wandern genau einen Regalplatz .
Wenn ich es danach weiterbewege, und zum Beispiel A wie Anton aufgelegt wird, verpasse ich ja das erste Regal mit 'A'.
Das Band wird nur nach dem Auflegen eines Buches weiterbewegt, nicht vorher. Ich stelle es mir so vor, dass es einen dedizierten Auflegeplatz gibt, so dass ein Buch nicht sofort nach dem Auflegen auf Position A liegt, sondern erst nach dem ersten Förderband-Takt.
Und es stimmt, nach jeder Bewegung wird für jedes Regal/Buch geprüft, ob es an der richtigen Stelle ist, und dann ggf. vom Band genommen - das kann natürlich in O (n) geschehen. Alle Bücher einsortieren, die auf dem Band an der falschen Stelle sind, hingegen nich!!!! :rolleyes:
Das sehe ich auch so. Für die Aufgabe wird ja zum Glück nur gefordert, dass ein Aufruf von sort() in O(n) abgeschlossen wird.
 

Meniskusschaden

Top Contributor
Vielleicht ist damit auch gemeint, dass, wenn ich 26 Bücher von Z beginnend bis A auf das Laufband lege, 25 mal für jedes Regal ein Check ausgeführt wird, ohne dass ein Buch entfernt wird. Erst beim 26. Schritt liegen alle Bücher richtig und werden nach wiederum 26 Checks alle zusammen vom Band genommen.
Möglicherweise ist das wirklich der Punkt, der in diesem Thread teilweise für Verwirrung gesorgt hat. Aber ich glaube, wenn man die Aufgabe sorgfältig liest, ist es letztlich doch eindeutig, dass sich O(n) auf einen sort()-Aufruf bezieht, also für jede Förderbandposition einmal zu prüfen, ob sie sich gerade vor dem richtigen Regal befindet.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Linked List set-Methode Java Basics - Anfänger-Themen 2
Gaudimagspam Linked Liste Java Basics - Anfänger-Themen 4
G Linked list, Methode zum Vertauschen von Elementen Java Basics - Anfänger-Themen 14
hooked Verkettete Liste / linked list Java Basics - Anfänger-Themen 2
S Methoden Linked List Methoden können nicht aufgerufen werden Java Basics - Anfänger-Themen 1
L Linked List - Array List Java Basics - Anfänger-Themen 2
SexyPenny90 Implementierung einer doubly linked list Java Basics - Anfänger-Themen 5
G Linked List Programm add Problem Java Basics - Anfänger-Themen 5
S Synchronisieren einer Linked List Java Basics - Anfänger-Themen 16
E Linked List generisch Java Basics - Anfänger-Themen 5
H Linked List sortieren Java Basics - Anfänger-Themen 9
B Linked-List Java Basics - Anfänger-Themen 2
T einfügen bei einer Linked List Java Basics - Anfänger-Themen 8
J linked list add ? Java Basics - Anfänger-Themen 2
J linked list Java Basics - Anfänger-Themen 13
M Beispiel für Linked List Java Basics - Anfänger-Themen 9
G Linked List mit Interface erstellen Java Basics - Anfänger-Themen 10
G (Linked)HashMap sortieren Java Basics - Anfänger-Themen 1
N Linked list sortieren Java Basics - Anfänger-Themen 8
K Java Linked List Java Basics - Anfänger-Themen 11
W löschen in einer single linked list Java Basics - Anfänger-Themen 3
M Linked List schreiben und lesen Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben