Modellierung, vererbung,

Noob1234_1234

Aktives Mitglied
Nein, nicht Container :) Ich wollte wissen, was container denn sein soll:

container dürfte null sein -> NullPointerException.

Hab jetzt die ganzen Attribute und Methoden static deklariert und jetzt wird zumindest das richtige ausgegeben ohne Fehler. Aber ich krieg die eine Kran Methode nicht hin. Kann mir bitte wer zeigen, wie ich der Methode 2 Ganzzahlen geben kann, sodass sie dann automatisch ermitteln kann, um welche Stapel es sich handelt? Ich sitze echt schon den ganzen Tag hier dran und hab kb mehr. Aber ich bin glaub ich kurz davor. Nur diese Methode macht mich kaputt
 

mrBrown

Super-Moderator
Mitarbeiter
Hab jetzt die ganzen Attribute und Methoden static deklariert und jetzt wird zumindest das richtige ausgegeben ohne Fehler.
Das solltest du direkt wieder rückgängig machen, das ist genau der falsche Weg :)
Also erstens soll der Kran zwei Zahlen (Integer entgegennehmen) und anhand von diesen die jeweiligen Stapel finden.
wo kommt denn zB diese Info her? In der Aufgabenstellung oben steht dazu nichts
 

Noob1234_1234

Aktives Mitglied
Das solltest du direkt wieder rückgängig machen, das ist genau der falsche Weg :)

Was ist denn dann der richtige Weg? Ich hab mich den ganzen Tag damit beschäftigt und mich überall eingelesen. Ich find nichts. Bitte sag mir, wenn du was weißt

wo kommt denn zB diese Info her? In der Aufgabenstellung oben steht dazu nichts
Aufgabe : Ich muss eine Textdatei einlesen und in der steht das
<Ursprung >;< Ziel >
Das Token <Ursprung > steht für die Ursprungsstapel-Nummer und ist wieder eine positive int-Zahl inklusive 0. Das Token <Ziel > steht für die Zielstapel-Nummer und ist wieder eine positive int-Zahl inklusive 0. Aber wie greift mein Kran auf die Stapelnummer von meinen Stapeln zu ?
 

mrBrown

Super-Moderator
Mitarbeiter
Nur weil in einer Textdatei zwei Zahlen stehen, heißt das nicht, dass dein Modell eine Methode besitzen muss, die genau diese beiden Zahlen bekommt.


Der Containertransport geschieht in vier Schritten:
1. Positioniere Kran vor Ursprungsstapel
2. Entnehme obersten Container („pick“)
3. Positioniere Kran vor Zielstapel
4. Lege zuvor aufgenommenen Container zuoberst ab („place“)
Dieses (Falls Teil der Aufgabenstellung) würde ich zumindest anders interpretieren.

Ich würde 1-4 genau so in Terminal erwarten, in Pseudocode etwa:
Code:
kran.positioniereVor(ursprungsstapel)
kran.pick()
kran.positioniereVor(zielstapel)
kran.place()
 

Noob1234_1234

Aktives Mitglied
Nur weil in einer Textdatei zwei Zahlen stehen, heißt das nicht, dass dein Modell eine Methode besitzen muss, die genau diese beiden Zahlen bekommt.



Dieses (Falls Teil der Aufgabenstellung) würde ich zumindest anders interpretieren.

Ich würde 1-4 genau so in Terminal erwarten, in Pseudocode etwa:
Code:
kran.positioniereVor(ursprungsstapel)
kran.pick()
kran.positioniereVor(zielstapel)
kran.place()

Ich hab aber trotzdem noch das Problem mit dem Zugriff auf andere Klassen. Ich weiß ich stell mich in euren Aufgaben sehr dumm an, aber wie greift dann meine ContainerStack Klasse auf die Inhalte, gespeicherten Werte etc der Container zu ?
Wie greift mein Kran auf die ContainerStackKlasse zu und kann zum bso die getContainerNumber in der Kran klasse aufrufen?
Genau das ist doch mein grundlegendes Problem. Ich steh absolut auf dem Schlauch und nichts will mehr klappen, aber danke dir schon mal. Dann muss ich den Transport Vorgang doch nicht in einem machen, aber kann mir bittr wer mein grundlegendes Problem lösen?
 

Noob1234_1234

Aktives Mitglied
Nur weil in einer Textdatei zwei Zahlen stehen, heißt das nicht, dass dein Modell eine Methode besitzen muss, die genau diese beiden Zahlen bekommt.

Aber die Zahlen die später in der Textdatei stehen, werden übergeben. Die 1. Positioniert den kran auf den stapel, dann wird das oberste gepickt und dsnn wird der Kran auf die 2. Zahl(anderer stapel) gesetzt . Weiß nicht ob das deine Absicht war, aber du hast mich auf eine Idee gebracht. Kann es sein, dass ich dem Kran ein Attribut "Position" mit settern/gettern geben muss und dem Konstruktor diese Position mitgeben muss?
 
Zuletzt bearbeitet von einem Moderator:

mrBrown

Super-Moderator
Mitarbeiter
Aber die Zahlen die später in der Textdatei stehen, werden übergeben. Die 1. Positioniert den kran auf den stapel, dann wird das oberste gepickt und dsnn wird der Kran auf die 2. Zahl(anderer stapel) gesetzt .
Und? Nur weil die irgendwo benutzt werden müssen, muss der Kran die trotzdem nicht kennen :)

Weiß nicht ob das deine Absicht war, aber du hast mich auf eine Idee gebracht.
Dich auf eine Idee zu bringen war Absicht :)

Kann es sein, dass ich dem Kran ein Attribut "Position" mit settern/gettern geben muss und dem Konstruktor diese Position mitgeben muss?
Würde ich zumindest machen, wobei man da am Konstruktor nichts machen muss (außer du möchtest modellieren, dass ein neuer Kran für jeden Stapel gebeut werden soll)
 

Noob1234_1234

Aktives Mitglied
Und? Nur weil die irgendwo benutzt werden müssen, muss der Kran die trotzdem nicht kennen :)
Wieso nicht ? Das ist der Part den Ich nicht kapiere ? Der Kran muss doch überprüfen, ob die Zahl die er bekommt zu einem Stapel gehört? Bzw er muss doch auf den Inhalt von der Containerklasse zugreifen ? Weil ich will im Kran in der methode irgendwo durch den Stack iterrieren um die mitgegebene int nummer mit stack.getContainerStackNumber zu vergleichen ? Wenn sie da ist muss die Position des Krans doch auf die bestätigte zahl setzen oder nicht? Oder passiert das alles erst in der TerminalContainer klasse? Aber dann ist mir imemrnoch nicht klar, wie die Methoden für den Kran aussehen ? Passieren die ganzen Überprüfungen im Kran selbst oder im Terminal?????

Dich auf eine Idee zu bringen war Absicht :)


Würde ich zumindest machen, wobei man da am Konstruktor nichts machen muss (außer du möchtest modellieren, dass ein neuer Kran für jeden Stapel gebeut werden soll)

Ne ne die Aufgabe gibt vor, dass es nur einen Kran für das Terminal gibt. Dem Konstruktor hätte ich eh nur die position mitgegeben, damit man den Kran im Terminal ein mal beliebig positioniert und halt dann den einen Kran auf die Positionen stellt.
 
Zuletzt bearbeitet von einem Moderator:

mrBrown

Super-Moderator
Mitarbeiter
Bitte achte doch beim Zitieren darauf, deinen eigenen Text nicht mit in das Zitat zu schreiben.

Wieso nicht ? Das ist der Part den Ich nicht kapiere ? Der Kran muss doch überprüfen, ob die Zahl die er bekommt zu einem Stapel gehört? Bzw er muss doch auf den Inhalt von der Containerklasse zugreifen ? Weil ich will im Kran in der methode irgendwo durch den Stack iterrieren um die mitgegebene int nummer mit stack.getContainerStackNumber zu vergleichen ? Wenn sie da ist muss die Position des Krans doch auf die bestätigte zahl setzen oder nicht? Oder passiert das alles erst in der TerminalContainer klasse?
Das alles muss nicht im Kran passieren - das Terminal hat Kran und Stapel, also kann das Terminal sich auch darum kümmern.

Aber dann ist mir imemrnoch nicht klar, wie die Methoden für den Kran aussehen ?
In meinem Vorschlag: public void positioniereVor(ContainerStack ...), public void pick() und public void place(). Füllen musst du die natürlich selbst.

Passieren die ganzen Überprüfungen im Kran selbst oder im Terminal?????
Kommt drauf an, was du mit "die ganzen Überprüfungen" meinst.

Die Überprüfung, wo der Kran hingestellt werden muss: Terminal.
Die Überprüfung, ob der Kran den Container von einem Stapel heben kann: Kran.

Ne ne die Aufgabe gibt vor, dass es nur einen Kran für das Terminal gibt. Dem Konstruktor hätte ich eh nur die position mitgegeben, damit man den Kran im Terminal ein mal beliebig positioniert und halt dann den einen Kran auf die Positionen stellt.
Das ist natürlich auch möglich :)
 

mihe7

Top Contributor
Wieso nicht ? Das ist der Part den Ich nicht kapiere ?
Genau deswegen bekommst Du Aufgaben gestellt, bei denen es um Modellierung geht. Das ist auch der Grund, warum ich hier auf dem Modell rumreite und relativ wenig zum Code geschrieben habe. Es bringt nichts, wenn Du Dich mit Code herumquälst, so lange das Modell nicht in Ordnung ist.

Der Kran muss doch überprüfen, ob die Zahl die er bekommt zu einem Stapel gehört? Bzw er muss doch auf den Inhalt von der Containerklasse zugreifen ? Weil ich will im Kran in der methode irgendwo durch den Stack iterrieren um die mitgegebene int nummer mit stack.getContainerStackNumber zu vergleichen ?

Die Aufgabe des Krans ist es, Container zu bewegen. Dazu kann er zu einem Containerstapel gefahren werden. Die Aufgabe des Krans ist nicht zu wissen, wo sich der Stapel mit der Nummer 4711 im Terminal befindet.

Dieses Wissen hat das Terminal. Aus Sicht der Modellierung stellt sich nur noch die Frage, ob es vernünftiger ist, wenn das Terminal den Kran kennt oder umgekehrt.

Man darf nicht vergessen, dass ein Modell, ganz allgemein, eine vereinfachende Abbildung eines Originals ist, die einem bestimmten Zweck dient. Ein Modell kann die Wirklichkeit nicht wahrheitsgemäß abbilden, ein Modell muss nur dazu taugen, den entsprechenden Zweck zu erfüllen.

Wenn Du z. B. in Google Maps o. ä. Dir die Karte der Welt ansiehst, stellst Du fest, dass Grönland dort fast so groß wie Afrika erscheint, obwohl Afrika etwa die 15-fache Fläche besitzt. Die Karte ist so gesehen falsch. Das macht aber nichts, da die Karte "nur" ein Modell ist, das einem Zweck dienen muss. Die Abbildung der Erde erfolgt bei diesen Karten nicht flächen- sondern winkeltreu, weil es in der Navigation (= Zweck) um korrekte Kurse (Winkel) und nicht um korrekte Flächen geht.

Man könnte sich überlegen, ein vollautomatisches Container Terminal zu bauen. Dem Terminal erteilt man nur einen Auftrag und das Terminal führt diesen selbsttätig aus. So spielt es für den Anwender des Terminals beispielsweise keine Rolle, ob dieses über einen einzigen Kran oder über 25 Kräne verfügt und welcher Kran welchen Beförderungsauftrag regelt. Ebenso uninteressant ist es für den Anwender zu wissen, wo die Container(stapel) genau stehen usw. Der Anwender sagt nur: "liebes Terminal, bitte sorge dafür, dass der oberste Container vom Stapel 0815 auf den Stapel 4711 geschoben wird".

In dem Fall muss das Terminal wissen (oder in Erfahrung bringen können), welche Stapel mit 0815 und 4711 gemeint sind und kann den Kran entsprechend instruieren.

Der Kran wiederum muss sicherstellen, dass er keinen Unsinn treibt. Der Kran weiß, ob er den Container hochheben kann und ob er ihn "ausreichend hoch" heben kann, um ihn auf dem Zielstapel platzieren zu können.

Der Stapel dagegen weiß, aus welchen Containern er besteht und kennt daher auch die aktuelle Gesamthöhe.

Derlei Überlegungen führen dann zu einem Modell, dessen Zweckmäßigkeit Du gedanklich überprüfen kannst, indem Du die Aufgabe anhand des Modells durchspielst.

Wenn Du soweit bist, dann kannst Du anfangen, den Spaß in Code zu gießen.
 

Noob1234_1234

Aktives Mitglied
Genau deswegen bekommst Du Aufgaben gestellt, bei denen es um Modellierung geht. Das ist auch der Grund, warum ich hier auf dem Modell rumreite und relativ wenig zum Code geschrieben habe. Es bringt nichts, wenn Du Dich mit Code herumquälst, so lange das Modell nicht in Ordnung ist.



Die Aufgabe des Krans ist es, Container zu bewegen. Dazu kann er zu einem Containerstapel gefahren werden. Die Aufgabe des Krans ist nicht zu wissen, wo sich der Stapel mit der Nummer 4711 im Terminal befindet.

Dieses Wissen hat das Terminal. Aus Sicht der Modellierung stellt sich nur noch die Frage, ob es vernünftiger ist, wenn das Terminal den Kran kennt oder umgekehrt.

Man darf nicht vergessen, dass ein Modell, ganz allgemein, eine vereinfachende Abbildung eines Originals ist, die einem bestimmten Zweck dient. Ein Modell kann die Wirklichkeit nicht wahrheitsgemäß abbilden, ein Modell muss nur dazu taugen, den entsprechenden Zweck zu erfüllen.

Wenn Du z. B. in Google Maps o. ä. Dir die Karte der Welt ansiehst, stellst Du fest, dass Grönland dort fast so groß wie Afrika erscheint, obwohl Afrika etwa die 15-fache Fläche besitzt. Die Karte ist so gesehen falsch. Das macht aber nichts, da die Karte "nur" ein Modell ist, das einem Zweck dienen muss. Die Abbildung der Erde erfolgt bei diesen Karten nicht flächen- sondern winkeltreu, weil es in der Navigation (= Zweck) um korrekte Kurse (Winkel) und nicht um korrekte Flächen geht.

Man könnte sich überlegen, ein vollautomatisches Container Terminal zu bauen. Dem Terminal erteilt man nur einen Auftrag und das Terminal führt diesen selbsttätig aus. So spielt es für den Anwender des Terminals beispielsweise keine Rolle, ob dieses über einen einzigen Kran oder über 25 Kräne verfügt und welcher Kran welchen Beförderungsauftrag regelt. Ebenso uninteressant ist es für den Anwender zu wissen, wo die Container(stapel) genau stehen usw. Der Anwender sagt nur: "liebes Terminal, bitte sorge dafür, dass der oberste Container vom Stapel 0815 auf den Stapel 4711 geschoben wird".

In dem Fall muss das Terminal wissen (oder in Erfahrung bringen können), welche Stapel mit 0815 und 4711 gemeint sind und kann den Kran entsprechend instruieren.

Der Kran wiederum muss sicherstellen, dass er keinen Unsinn treibt. Der Kran weiß, ob er den Container hochheben kann und ob er ihn "ausreichend hoch" heben kann, um ihn auf dem Zielstapel platzieren zu können. ???


Der Stapel dagegen weiß, aus welchen Containern er besteht und kennt daher auch die aktuelle Gesamthöhe.

Derlei Überlegungen führen dann zu einem Modell, dessen Zweckmäßigkeit Du gedanklich überprüfen kannst, indem Du die Aufgabe anhand des Modells durchspielst.

Wenn Du soweit bist, dann kannst Du anfangen, den Spaß in Code zu gießen.
Ich glaube wir reden alle aneinander vorbei. Ihr habt mir echt viel bei der Modellierung geholfen und inzwischen ist mir auch klar, was der Sinn vom Terminal ist, aber mein grundlegendes Problem/Frage, die ich schon 3 oder 4 mal gestellt habe, wird mir nicht beantwortet.
Wie lass ich denn den Kran auf die Container zugreifen? Ich hab alles auf static gesetzt und so klappts, aber mir wurde schon gesagt, dass das der falsche Weg ist und mir ist das ja auch bewusst, aber ich versteh es echt nicht?

Code:
public class Crane {

    private static final int maxHeight = 2438; // 160 Fuß entsprechen 2438,4 cm
    private static final int maxloadCapacity = 30000;
    private int position;

    public static int getMaxheight() {
        return maxHeight;
    }

    public static int getMaxloadcapacity() {
        return maxloadCapacity;
    }

    public Crane(int position) {
        setPosition(position);
    }

    public void setPosition(int position) {
        this.position = position;
    }

    public void cranePositioningOrigin(int stackNumber) {
        setPosition(stackNumber);
    }

    public void cranePositioningDestination(int stackNumber2) {
        setPosition(stackNumber2);
    }

    public Container pick() { // Brauche ich pick und place überhaupt ??? oder kann ich meine positioning methoden mit der transport methode kopieren?
        
    }

    public Container place() {

    }

    public void transportContainer(ContainerStack origin, ContainerStack destination) {
    
    // Legitim ?
        if (Crane.getMaxloadcapacity() >= origin.getContainerWeight()
                && Crane.getMaxheight() >= (Crane.getMaxheight() - destination.calculateContainerStackHeight())) {

            Container c = origin.pick();
            destination.place(c);
        } else {
            System.out.println("zu schwer oder zu hoch");
        }
    }
}
 

Noob1234_1234

Aktives Mitglied
Laut euren Beschreibungen dachte ich, dass die Überprüfung ob und was der Kran kann auch vom Terminal passiert, denn ihr habt ja beide schon festgestellt, dass nur das Terminal sowohl Zugriff auf den Kran hat als auch auf den Stapel und da nur der Stapel Auskunft über die Container hat, kann doch auch nur das Terminal entscheiden, ob der Kran was kann oder nicht ?

Ich hab in der Aufgabe noch eine Testein- und ausgabe. Diese wird als Textdatei gelesen und soll entsprechend das gleiche wie aufm Blatt raus kommen
 

mrBrown

Super-Moderator
Mitarbeiter
Ich glaube wir reden alle aneinander vorbei. Ihr habt mir echt viel bei der Modellierung geholfen und inzwischen ist mir auch klar, was der Sinn vom Terminal ist, aber mein grundlegendes Problem/Frage, die ich schon 3 oder 4 mal gestellt habe, wird mir nicht beantwortet.
Wie lass ich denn den Kran auf die Container zugreifen? Ich hab alles auf static gesetzt und so klappts, aber mir wurde schon gesagt, dass das der falsche Weg ist und mir ist das ja auch bewusst, aber ich versteh es echt nicht?
Dein Problem lässt sich nicht von der Modellierung trennen :)

In Kran brauchst du die Position nicht als int, oder steht der Kran vor einer Zahl?
Bring einfach mal den Satz zu Ende: „Der Kran steht vor einem ___“


Laut euren Beschreibungen dachte ich, dass die Überprüfung ob und was der Kran kann auch vom Terminal passiert, denn ihr habt ja beide schon festgestellt, dass nur das Terminal sowohl Zugriff auf den Kran hat als auch auf den Stapel und da nur der Stapel Auskunft über die Container hat, kann doch auch nur das Terminal entscheiden, ob der Kran was kann oder nicht ?
Das Terminal kennt zwar den Kran, aber nur der Kran kennt seine eigenen Daten.
Nur das Terminal kennt alle ContainerStapel - aber deshalb soll der Kran ja entsprechend positioniert werden, dann kann auch der Kran den jeweiligen Stapel kennen.
 

mihe7

Top Contributor
aber mein grundlegendes Problem/Frage, die ich schon 3 oder 4 mal gestellt habe, wird mir nicht beantwortet.
Wie lass ich denn den Kran auf die Container zugreifen?
Die Hoffnung besteht darin, dass der Fragesteller selbst auf die Lösung kommt. Das Problem hat sich nämlich nie wirklich gestellt. Du hast es nur zu einem Problem gemacht, weil Du im Kran unbedingt eine Stapelnummer haben willst.
 

Noob1234_1234

Aktives Mitglied
Dein Problem lässt sich nicht von der Modellierung trennen :)

In Kran brauchst du die Position nicht als int, oder steht der Kran vor einer Zahl?
Bring einfach mal den Satz zu Ende: „Der Kran steht vor einem ___“
Containerstapel?


Das Terminal kennt zwar den Kran, aber nur der Kran kennt seine eigenen Daten.
Nur das Terminal kennt alle ContainerStapel - aber deshalb soll der Kran ja entsprechend positioniert werden, dann kann auch der Kran den jeweiligen Stapel kennen.
 

mihe7

Top Contributor
Ihr beiden seht wohl die Lösung schon, aber ich hänge auf dem Schlauch....
Die Lösung gab es schon die ganze Zeit: void transportContainer(ContainerStack origin, ContainerStack destination), nur dass Du mir hier
Nachtrag: wie ich gerade lese, wird es die Methode so nicht geben, da die Transportschritte einzeln durchzuführen sind.
nicht glauben wolltest. Jetzt wird die Methode halt in einzelne Schritte aufgeteilt. Und der Kran vor einem
positioniert.
 

Noob1234_1234

Aktives Mitglied
Hä dann ist es doch so oder wie ? Aber wo geb ich die Zahlen bitte mit und wie kombiniere ich das. Sobald alles klappt muss ich noch eine main Methode schreiben, die eine Textdatei lesen und anwenden kann. In der Textdatei steht dann irgendwo 2 Zeilen (1. Zeile 2,0 und 2. Zeile 3,2) und das bedeutet dann, dass der oberste Container vom Stappel 2 auf den 0. gepackt wird, und der oberste Container von 3 auf den 2. Stappel. Und hier liegt ja das Problem, wo nimmt mein Programm die 2 Werte entgegen und wie verarbeitet er sie ?
Code:
public void transportContainer(ContainerStack origin, ContainerStack destination) {

        if (Crane.getMaxloadcapacity() >= origin.getContainerWeight()
                && Crane.getMaxheight() >= (Crane.getMaxheight() - destination.calculateContainerStackHeight())) {

            Container c = origin.pick();
            destination.place(c);
        } else {
            System.out.println("zu schwer oder zu hoch");
        }
    }
 

mrBrown

Super-Moderator
Mitarbeiter
Hä dann ist es doch so oder wie ?
Nein, wie @mihe7 sagte, muss die Methode in einzelne Schritte aufgeteilt werden.

Kümmer dich erstmal nur um das Positionieren. Wenn das fertig ist, kann man sich um den Rest kümmern.


Und hier liegt ja das Problem, wo nimmt mein Programm die 2 Werte entgegen und wie verarbeitet er sie ?
Später mal in main und Terminal, aber das ist grad noch irrelevant.
 

Noob1234_1234

Aktives Mitglied
Ich schätze mal mein Ansatz ist falsch, wenn du schon sagst kümmer dich ums Positionieren oder ?

Code:
public void setPosition(int position) {
        this.position = position;
    }

    public void cranePositioningOrigin(int stackNumber) {
        setPosition(stackNumber);
    }

    public void cranePositioningDestination(int stackNumber2) {
        setPosition(stackNumber2);
    }

    public Container pick(ContainerStack origin) {
        return origin.pick();
    }

    public void place(Container container, ContainerStack destination) {
        destination.place(container);
    }
 

Javinner

Top Contributor
  1. Positioniere Kran vor Ursprungsstapel
  2. Entnehme obersten Container („pick“)
  3. Positioniere Kran vor Zielstapel
  4. Lege zuvor aufgenommenen Container zuoberst ab („place“)
Dein Ursprungstapel hat:
  • Container 1
  • Container 2
  • Container...
1 & 2:
Nimm ein Container aus dem Ursprungsstapel wenn das Gewicht vom Kran getragen werden kann.
Java:
class Stapel

{

    private Container aktuellerContainer;

   

    public Container gebeAktuellenContainer()

    {

        return this.aktuellerContainer;

    }

}

class Kran
{
    private final double maxHeben;
   
    //...
   
   
    boolean kannContainerHeben(Container container)
    {
        return this.maxHeben >= container.gebeGewicht();
    }
}
Wenn nicht der Fall, tausche ersten Container gegen nächst liegenden aus, wiederhole die Prüfung.


3 & 4
Lege den Container, den Kran gerade transportiert, auf der ersten Stelle ab. Eine LinkedList bietet hier eine Methode mit dem Namen addFirst(E e) an. Man könnte jetzt die vorhandenen Strukturen nehmen oder aber auch eine eigene Lösung entwickeln.
 

mrBrown

Super-Moderator
Mitarbeiter

mihe7

Top Contributor
Ich schätze mal mein Ansatz ist falsch,
Ja. Dein Kran muss lediglich
1. Positioniere Kran vor Ursprungsstapel
2. Entnehme obersten Container („pick“)
3. Positioniere Kran vor Zielstapel
4. Lege zuvor aufgenommenen Container zuoberst ab („place“)
unterstützen.

D. h.

12892

Dabei bewegt die Methode moveTo() den Kran zum angegebenen Stapel, pick() nimmt von dem Stapel, vor dem der Kran aktuell steht, den obersten Container und mit place() wird der Container, der gerade am Kran hängt, auf dem Stapel abgelegt, vor dem der Kran aktuell steht.
 

Noob1234_1234

Aktives Mitglied
Ja. Dein Kran muss lediglich

unterstützen.

D. h.

Anhang anzeigen 12892

Dabei bewegt die Methode moveTo() den Kran zum angegebenen Stapel, pick() nimmt von dem Stapel, vor dem der Kran aktuell steht, den obersten Container und mit place() wird der Container, der gerade am Kran hängt, auf dem Stapel abgelegt, vor dem der Kran aktuell steht.

Och man ich hab das alles doch schon die ganze vor mir. Ich hab alle Antworten 10000 durchgelesen, aber ich checke es nicht. Wie sieht die moveTo Methode bitte aus. Mir ist doch klar, dass sie zum jewiligen Stapel soll, aber ich hab keine Ahnung wie ich das umsetzen soll. Was kommt in die Klammer der Methode, wenn s kein int ist??? Leute bitte ich bin echt am verzweifeln und ich hänge an diesem Punkt seit gestern und es fehlt noch einiges.
 

Noob1234_1234

Aktives Mitglied
Ja. Dein Kran muss lediglich

unterstützen.

D. h.

Anhang anzeigen 12892

Dabei bewegt die Methode moveTo() den Kran zum angegebenen Stapel, pick() nimmt von dem Stapel, vor dem der Kran aktuell steht, den obersten Container und mit place() wird der Container, der gerade am Kran hängt, auf dem Stapel abgelegt, vor dem der Kran aktuell steht.

Hat dieses " s : Containerstack" eine spezielle Bedeutung ? Seh ich jetzt so zum ersten Mal, Kenn den Doppelpunkt nur von der for each Schleife
 

Noob1234_1234

Aktives Mitglied
Womit modelliert ihr denn? Das ist die normale UML-Schreibweise. Übersetzt in Java wäre das einfach ContainerStack s.
Ich kenn UML nicht. Uns wurde modellieren nicht so beigebracht.

Das kann so auch noch nicht stimmen, aber gehts jetzt in die richtige Richtung ?
Java:
public void moveTo(ContainerStack s) {
        s.getContainerStackID();
    }
 

Noob1234_1234

Aktives Mitglied
Oder so? Es muss ja einen Rückgabewert haben, sonst mach das ganze doch kein Sinn oder ?
Code:
public int moveTo(ContainerStack s) {
        return s.getContainerStackID();
    }
 

mihe7

Top Contributor
Uns wurde modellieren nicht so beigebracht.
Womit modelliert ihr dann?

Es muss ja einen Rückgabewert haben, sonst mach das ganze doch kein Sinn oder ?
Wozu? Die Methode muss lediglich dafür sorgen, dass der Kran zum angegebenen Stapel fährt, also seine Position ändert.

Java:
public class Crane {
    private ContainerStack position; // aktuelle Position des Krans

    public void moveTo(ContainerStack stack) { // fährt den Kran zu stack,
        position = stack; // womit sich die aktuelle Position ändert
    }
}
 

Noob1234_1234

Aktives Mitglied
Womit modelliert ihr dann?


Wozu? Die Methode muss lediglich dafür sorgen, dass der Kran zum angegebenen Stapel fährt, also seine Position ändert.

Java:
public class Crane {
    private ContainerStack position; // aktuelle Position des Krans

    public void moveTo(ContainerStack stack) { // fährt den Kran zu stack,
        position = stack; // womit sich die aktuelle Position ändert
    }
}

Ich check aber immernoch nicht, wo hier dann die Integer ins Spiel kommen? Passiert das später oder wie habt ihr euch das vorgestellt ?

Passt das jetzt?

Code:
public void moveTo(ContainerStack stack) {
        position = stack;
    }

    public Container pick(ContainerStack origin) {
        return origin.pick();
    }

    public void place(Container container, ContainerStack destination) {
        destination.place(container);
    }
 

Noob1234_1234

Aktives Mitglied
In Kran brauchst du keinen Integer, der kommt später in Terminal ins Spiel.
Okey da vertrau ich euch mal.

pick und place brauchen beide keine Argumente.
[/QUOTE]
Dass pick keins braucht, das versteh ich noch, aber braucht place nicht Container als Argument?

Code:
public void moveTo(ContainerStack stack) {
        position = stack;
    }

    public Container pick() {
        return position.pick();
    }

    public void place(Container container) {
        position.place(container);
    }
 

Noob1234_1234

Aktives Mitglied
Sie brauchen auch alle keine Rückgabe.



Der Kran soll den Container hochheben und transportieren - sollte der Kran dann vielleicht den Container, den er grad transportiert, kennen, und muss den nicht übergeben bekommen? :)

Aber der Kran muss den Container doch zuoberst auf den Zielstack ablegen ? Wenn der Kran also beim Zielstapel ist, muss er ja was placen, außer natürlich er plact etwas neues ?
So?
Code:
public void place() {
        position.place(new Container());
    }
Code:
Edit: So müsste es aussehen

public void place() {
        position.place(position.pick());
    }
 

Noob1234_1234

Aktives Mitglied
Mein Kran sollte ja jetzt die Fähigkeit haben die Container zu bewegen. Fällt damit die 4. Methode vom Anfang weg und wird in den Logistikbereich des Terminals verschoben oder bliebt sie beim Kran ?
 

Noob1234_1234

Aktives Mitglied
Nein, Du musst in einer Variablen speichern, was am Kran hängt.

Was denn jetzt xD? MrBrown meinte alle 3 Methoden haben keine Rückgabetyp und es könnte sein, dass er recht hat, weil so müsste doch der Aufbau des Transports sein:

Code:
public void transportContainer(ContainerStack origin, ContainerStack destination) {
        moveTo(origin);
        if (Crane.getMaxloadcapacity() >= origin.getContainerWeight()
                && Crane.getMaxheight() >= (Crane.getMaxheight() - destination.calculateContainerStackHeight())) {
            pick();
            moveTo(destination);
            place();
        } else {
            System.out.println("zu schwer oder zu hoch");
        }
 

mihe7

Top Contributor
Was denn jetzt xD? MrBrown meinte alle 3 Methoden haben keine Rückgabetyp und es könnte sein, dass er recht hat
Ja, das schließt einander ja nicht aus, im Gegenteil.

Deine Methode
Java:
public void place() {
        position.place(position.pick());
    }
macht nichts anderes, als von dem Stapel, vor dem der Kran gerade steht, den obersten Container herunterzunehmen (position.pick()), um ihn gleich wieder auf den selben Stapel abzulegen. Das ist doch Blödsinn.

Der Kran muss sich beim pick() merken, welchen Container er geladen hat, um diesen Container später beim place zu verwenden.

Ohne die notwendigen Prüfungen sähe der Code also in etwa so aus:

Java:
public class Crane {
    private Container load;

    // ...

    public void pick() {
        load = position.pick();
    }

    public void place() {
        position.place(load);
    }
}
 

Noob1234_1234

Aktives Mitglied
Ja, das schließt einander ja nicht aus, im Gegenteil.

Deine Methode
Java:
public void place() {
        position.place(position.pick());
    }
macht nichts anderes, als von dem Stapel, vor dem der Kran gerade steht, den obersten Container herunterzunehmen (position.pick()), um ihn gleich wieder auf den selben Stapel abzulegen. Das ist doch Blödsinn.

Der Kran muss sich beim pick() merken, welchen Container er geladen hat, um diesen Container später beim place zu verwenden.

Ohne die notwendigen Prüfungen sähe der Code also in etwa so aus:

Java:
public class Crane {
    private Container load;

    // ...

    public void pick() {
        load = position.pick();
    }

    public void place() {
        position.place(load);
    }
}

Hab es jetzt so gemacht, wie du das gesagt hast, wobei ich glaube, dass meine Variante auch funktioniert, denn wenn ich den Move Befehl verwende speichert ja mein Kran zuerst die Ursprungsstaple position, nehmt den Container und bewegt sich doch dann zum Zielstapel und somit speichert er dann diese Position und legt es nicht zurück zum Anfang oder etwa doch?

Aber deine Variante erscheint mir sicherer und einfacher zu verstehen
 

Noob1234_1234

Aktives Mitglied
Ich hoffe jetzt passte es mit der Kran Klasse ? Weil dann fehlt nur noch die Umsetzung der Terminal Klasse. Bin echt gespannt, wie diese zwei Integer Werte ins Systems passen, weil ich seh es noch nicht

Code:
public class Crane {

    private static final int MAXHEIGHT = 2438; // 160 Fuß entsprechen 2438,4 cm
    private static final int MAXLOADCAPACITY = 30000;
    private ContainerStack position; // aktuelle Position des Krans
    private Container containerLoad;

    public static int getMaxheight() {
        return MAXHEIGHT;
    }

    public static int getMaxloadcapacity() {
        return MAXLOADCAPACITY;
    }

    public void moveTo(ContainerStack stack) {
        position = stack;
    }

    public void pick() {
        containerLoad = position.pick();
    }

    public void place() {
        position.place(containerLoad);
    }

    public void transportContainer(ContainerStack origin, ContainerStack destination) {
        moveTo(origin);
        if (Crane.getMaxloadcapacity() >= origin.getContainerWeight()
                && Crane.getMaxheight() >= (Crane.getMaxheight() - destination.calculateContainerStackHeight())) {
            pick();
            moveTo(destination);
            place();
        } else {
            System.out.println("zu schwer oder zu hoch");
        }
    }
}
 

mrBrown

Super-Moderator
Mitarbeiter
Hab es jetzt so gemacht, wie du das gesagt hast, wobei ich glaube, dass meine Variante auch funktioniert, denn wenn ich den Move Befehl verwende speichert ja mein Kran zuerst die Ursprungsstaple position, nehmt den Container und bewegt sich doch dann zum Zielstapel und somit speichert er dann diese Position und legt es nicht zurück zum Anfang oder etwa doch?
Nein, Place nimmt bei dir wie gesagt den Container vom aktuellen Stapel, und legt ihn dann direkt wieder auf den aktuellen Stapel.


Ich hoffe jetzt passte es mit der Kran Klasse ?
transportContainer ist überflüssig.
 

mihe7

Top Contributor
Mal nebenbei gefragt: hat es eigentlich einen bestimmten Grund, dass Du die Höhen in das metrische System umrechnest?
 

Noob1234_1234

Aktives Mitglied
Nein, Place nimmt bei dir wie gesagt den Container vom aktuellen Stapel, und legt ihn dann direkt wieder auf den aktuellen Stapel.



transportContainer ist überflüssig.
Also brauch ich diese Methode später nicht in der Terminal Klasse? Dachte die KranKlasse muss die Überprüfungen machen, ob sie kann, was das Terminal will?

Aber wie soll denn jetzt die Terminalklasse aufgebaut sein? Es gibt einen Kran und beliebig viele Stapel ?
 

mihe7

Top Contributor
Dachte die KranKlasse muss die Überprüfungen machen, ob sie kann, was das Terminal will?
Ja, muss sie auch. Die Prüfungen gehören insbesondere in die Methoden pick() und place().

Fällt mir leichter so oder denkst du es wäre besser wenn ich bei Fuß und Zoll bleibe ? Dann müsste ich ja double/float verwenden, was aber in dem Sinne keinen Unterschied macht
Durch die Umrechnung hast Du Rundungsfehler, die sich addieren. Wenn Du z. B. die Höhe 9'6'', also 114'' in Zentimeter umrechnest, kommst Du auf 289 Zentimeter bei Abrundung bzw. 290 Zentimeter bei Aufrundung. Das macht bei Abrundung einen Fehler von 0,56 Zentimeter pro Container, so dass die Gesamthöhe von 5 übereinander gestapelten Containern um über einen Zoll von der tatsächlichen Höhe abweicht (5 x 0,56 cm = 2,8 cm, also etwas mehr als 1.1'')

Bleibst Du dagegen bei Zoll, brauchst Du auch keine Dezimalzahlen, hast aber das exakte Ergebnis: ein Container ist 114 Zoll hoch. 5 Container übereinander machen 570 Zoll. Der Kran ist 160 Fuß, also 1920 Zoll hoch -> alles kein Problem.
 

mrBrown

Super-Moderator
Mitarbeiter
Also brauch ich diese Methode später nicht in der Terminal Klasse?
In ähnlicher Form, aber in Kran brauchst du sie in jedem Fall nicht.


Dachte die KranKlasse muss die Überprüfungen machen, ob sie kann, was das Terminal will?
Richtig - das fehlt noch.
Dafür brauchst du aber keine zusätzliche Methode, du musst nur die bestehenden Methoden des Krans ergänzen.
Wo könnte man die Dinge denn sinnvoll prüfen?
Fällt mir leichter so oder denkst du es wäre besser wenn ich bei Fuß und Zoll bleibe ? Dann müsste ich ja double/float verwenden, was aber in dem Sinne keinen Unterschied macht
2438,4 ist einfacher als 160? ;)
 

Noob1234_1234

Aktives Mitglied
So wäre mein Ansatz :
Alle paramter, die in der Methode stehen müssen mitgegeben werden

Code:
public class ContainerTerminal {

    final Crane crane = new Crane();

    public void terminalDoWorkContainer(String containertyp, int id, int weight, int stacknumber, int origin,
            int destination) {

        ContainerStack cs0 = new ContainerStack(stacknumber);
        cs0.place(new Container40ft(containertyp, id, weight));
// hier drinnne dann der Transport?
        Terminal.printLine(cs0);

    }
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Arbeitszeit / Zeiterfassung - Gedanken und Modellierung Java Basics - Anfänger-Themen 122
L Modellierung Widerstandsnetzwerk Java Basics - Anfänger-Themen 15
M Problem in der Modellierung Java Basics - Anfänger-Themen 20
D Verständnisfrage zur Modellierung einer HDD Java Basics - Anfänger-Themen 17
F OO - Modellierung Java Basics - Anfänger-Themen 24
S Modellierung von Karteneffekten ähnlich YUGIOH Java Basics - Anfänger-Themen 2
1 Modellierung eines Bankkunden Java Basics - Anfänger-Themen 6
N Modellierung eines Programms in UML (Klassendiagramm) Java Basics - Anfänger-Themen 2
B Klassen Modellierung einer Kneipe Java Basics - Anfänger-Themen 86
A Modellierung Java Basics - Anfänger-Themen 8
M Modellierung eines trivialen Web-Shops Java Basics - Anfänger-Themen 12
imocode Vererbung Problem mit Vererbung Java Basics - Anfänger-Themen 2
M Vererbung - Polymorphie Java Basics - Anfänger-Themen 37
L Java- Vererbung Java Basics - Anfänger-Themen 4
ineedhelpinjava Vererbung Java Basics - Anfänger-Themen 12
ineedhelpinjava Vererbung Java Basics - Anfänger-Themen 1
I JSON / XML Struktur mit Vererbung / Interfaces Java Basics - Anfänger-Themen 0
M Interface oder Vererbung? Java Basics - Anfänger-Themen 12
M Vererbung Java Basics - Anfänger-Themen 6
M Designentscheidung von Attributen/Methoden im Falle von Vererbung Java Basics - Anfänger-Themen 8
M Generics Vererbung Listen Java Basics - Anfänger-Themen 2
A Methoden Vererbung und Interface Java Basics - Anfänger-Themen 14
D Klassen und Vererbung Java Basics - Anfänger-Themen 2
U Vererbung Java Basics - Anfänger-Themen 7
D Vererbung Java Basics - Anfänger-Themen 3
K Schleife berechnet kein Ergebnis (Vererbung) Java Basics - Anfänger-Themen 6
00111010101 Objektorientiertes Programmieren mit Vererbung (Zahlen in Array verschwinden) Java Basics - Anfänger-Themen 3
W Zur Vererbung: Wann und wie? Java Basics - Anfänger-Themen 35
H Datenkapselung, Vererbung und UML Java Basics - Anfänger-Themen 16
districon Super-Stichwort/ Vererbung Java Basics - Anfänger-Themen 3
YaU Vererbung erstellt NullPointerException? Java Basics - Anfänger-Themen 4
1 Vererbung Klassenattribute Java Basics - Anfänger-Themen 9
TimoN11 Frage zu Java-Vererbung (Cast) Java Basics - Anfänger-Themen 5
N Thema Vererbung Java Basics - Anfänger-Themen 31
A Vererbung Vererbung Übung Java Basics - Anfänger-Themen 5
B Vererbung - Sichtbarkeitsmodifikation - protected Java Basics - Anfänger-Themen 10
B Best Practice Unschlüssig ob Vererbung oder Interface Java Basics - Anfänger-Themen 2
G Java Vererbung Java Basics - Anfänger-Themen 8
Y Vererbung Konto - Anfangsprobleme Java Basics - Anfänger-Themen 7
A Vererbung Klassen im Bezug auf Auto´s Java Basics - Anfänger-Themen 18
A Klassen Vererbung und zusätzliche Unterklassen Java Basics - Anfänger-Themen 23
M Vererbung mit Enums Java Basics - Anfänger-Themen 8
Kirby.exe Vererbung im Detail erklärt? Java Basics - Anfänger-Themen 9
M Fehlendes Verständnis für dynamische Bindung und Vererbung Java Basics - Anfänger-Themen 13
W OOP Vererbung im Computerspiel Java Basics - Anfänger-Themen 7
J Probleme mit Vererbung Java Basics - Anfänger-Themen 4
I Vererbung Java Basics - Anfänger-Themen 13
W OOP Vererbung und Problem bei Zählschleife in einer Methode Java Basics - Anfänger-Themen 10
W Methoden Verständnisfrage Vererbung von Methoden Java Basics - Anfänger-Themen 14
V Vererbung Java Basics - Anfänger-Themen 2
J Frage zur Vererbung Java Basics - Anfänger-Themen 1
J Vererbung Java Basics - Anfänger-Themen 3
U Was löst meine NullPointerException aus? (Vererbung) Java Basics - Anfänger-Themen 12
O Vererbung Ueben mit kleiner Datenstruktur von Räumen Java Basics - Anfänger-Themen 10
O Umgang mit Vererbung verstehen Java Basics - Anfänger-Themen 4
A Vererbung/Interfaces/Generics Java Basics - Anfänger-Themen 12
O Vererbung änderung des Konstruktors Java Basics - Anfänger-Themen 8
L Vererbung Java Basics - Anfänger-Themen 5
E HashMap+Vererbung Java Basics - Anfänger-Themen 11
E Vererbung super-Methoden Aufruf Java Basics - Anfänger-Themen 3
B Java Vererbung Fragen (zu Code Beispiel) Java Basics - Anfänger-Themen 3
A Objekterstellung bei der Vererbung Java Basics - Anfänger-Themen 7
P Vererbung Warum funktioniert die Vererbung hier nicht Java Basics - Anfänger-Themen 14
S Vererbung Java mehrfach Java Basics - Anfänger-Themen 10
B Objekte zählen/ Vererbung/ Kopplung/ Interface/ Abstract Class Java Basics - Anfänger-Themen 5
A Klassen Vererbung privater Methoden und Member Java Basics - Anfänger-Themen 12
A Konstruktoren Vererbung Java Basics - Anfänger-Themen 3
ReinerCoder Vererbung von JFrame in einer Klasse entfernen Java Basics - Anfänger-Themen 5
W Vererbung, abstract und Konstruktoren Java Basics - Anfänger-Themen 30
J Vererbung und Methodenaufruf Java Basics - Anfänger-Themen 11
G Polymorphie, Vererbung, statischer Typ, Laufzeittyp Java Basics - Anfänger-Themen 2
H Vererbung mit private instanzvariablen Java Basics - Anfänger-Themen 9
S Vererbung Funktionsweise Code zur Vererbung Java Basics - Anfänger-Themen 1
C Methoden Vererbung private Attribute/public Methoden Java Basics - Anfänger-Themen 4
S Verständnis Vererbung Java Basics - Anfänger-Themen 3
D JavaFX Vererbung Java Basics - Anfänger-Themen 2
U Vererbung Generizität und Vererbung Java Basics - Anfänger-Themen 4
A Vererbung bei Klassen mit Objekt der Klasse im Konstruktor Java Basics - Anfänger-Themen 4
K Vererbung Octagon von Circle Java Basics - Anfänger-Themen 0
B Hilfe bei Vererbung Java Basics - Anfänger-Themen 2
D Vererbung Frage zum Klassenaufbau mit Vererbung Java Basics - Anfänger-Themen 1
T Vererbung und interface. Java Basics - Anfänger-Themen 1
S Gehaltsberechnung (Vererbung, abstrakte Methoden) Java Basics - Anfänger-Themen 6
S Vererbung Java Basics - Anfänger-Themen 1
F Vererbung in zwei Richtungen? Java Basics - Anfänger-Themen 14
D Vererbung / Polymorphie Java Basics - Anfänger-Themen 5
O Vererbung Java Basics - Anfänger-Themen 5
MiMa Vererbung Theorie OK, Praxis ?? Java Basics - Anfänger-Themen 4
Arif Vererbung Vererbung Variablen überschreiben Java Basics - Anfänger-Themen 1
C Vererbung - Ausgaben bestimmen Java Basics - Anfänger-Themen 6
S Vererbung Java Basics - Anfänger-Themen 10
L Setter und Getter/Vererbung Java Basics - Anfänger-Themen 6
C Konstruktoren und Vererbung Java Basics - Anfänger-Themen 2
J Kleinere Frage zur Vererbung/Objekterzeugung Java Basics - Anfänger-Themen 2
G Vererbung Java Basics - Anfänger-Themen 12
J Vererbung privater Variablen Java Basics - Anfänger-Themen 7
J Vererbung Vererbung von Methoden Java Basics - Anfänger-Themen 6
B Vererbung Java Basics - Anfänger-Themen 12
K Vererbung (super) Java Basics - Anfänger-Themen 2
A ArrayQueue mit Exceptions und Vererbung Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben