Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
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
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 ?
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“)
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?
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?
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 .
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)
ROFL. Wie kommst Du denn nur darauf? In Wahrheit schreiben wir die Kommentar hier nur, um die Leute zu ärgern und dann passiert ausgerechnet @mrBrown so etwas
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?????
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.
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?
In meinem Vorschlag: public void positioniereVor(ContainerStack ...), public void pick() und public void place(). Füllen musst du die natürlich selbst.
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.
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.
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");
}
}
}
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
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?
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.
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.
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.
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.
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");
}
}
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.
In meinem Vorschlag: public void positioniereVor(ContainerStack ...), public void pick() und public void place(). Füllen musst du die natürlich selbst.
1. Positioniere Kran vor Ursprungsstapel
2. Entnehme obersten Container („pick“)
3. Positioniere Kran vor Zielstapel
4. Lege zuvor aufgenommenen Container zuoberst ab („place“)
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.
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.
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.
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
}
}
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
}
}
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);
}
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?
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());
}
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 ?
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");
}
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);
}
}
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
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");
}
}
}
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?
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 ?
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
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.
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
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);
}