Unsicher bei Aufgabenstellung

Hi, ich hab ein Programm geschrieben und bin mir aber unsicher ob ich die Aufgabenstellung erfüllt hab, wäre cool wenn mal jemand drüber gucken kann :).

Betrachten Sie folgende Denksportaufgabe:

Ein Bauer (B), ein Huhn (H), ein Fuchs (F) und Getreide (G) befinden sich am Ufer eines Flusses. Der Bauer mo ̈chte mit einem Boot alles auf das andere Ufer bringen. Leider kann der Bauer nur sich und ho ̈chstens eins der drei Dinge mit ins Boot nehmen. Wenn allerdings der Fuchs mit dem Huhn ohne den Bauern zusammen an einem Ufer bleibt, frisst der Fuchs das Huhn. Wenn das Huhn ohne den Bauern mit dem Getreide an einem Ufer bleibt, dann frisst das Huhn das Getreide. In welcher Reihenfolge muss der Bauer mit einem der drei Dinge von einem zu anderen Ufer fahren, damit sich alle zu Schluss am anderen Ufer befinden?

Dieses Problem la ̈sst sich systematisch mit einem endlichen Automaten lo ̈sen. Ein einzelner Zustand des Automaten beschreibt, welche Dinge sich am welchen Ufer befindet. Eine Transition beschreibt das U ̈bersetzen des Bauern mit einen der drei Dingen.

Folgender Automat zeigt den Anfangszustand und zwei mo ̈gliche Zustandsu ̈berga ̈nge. Die Dinge am linken Ufer sind im Zustandsknoten oberhalb der Dinge am rechten Ufer angegeben. Wenn der Bauer alleine u ̈bersetzt, dann frisst der Fuchs das Huhn. Aus diesem Endzustand kommt der Bauer nicht mehr heraus. Beim anderen Zustandsu ̈bergang fa ̈hrt der Bauer mit dem Huhn u ̈ber das Ufer. Wenn er mit dem Huhn wieder zuru ̈ckfa ̈hrt, dann befindet sich der Automat im Anfangszustand.

Erweitern Sie den Automaten um alle mo ̈glichen Zustandsu ̈bergange und Zusta ̈nde.
Lesen Sie daraus die ku ̈rzeste mo ̈gliche Lo ̈sung ab.
Auch wenn das Problem jetzt gelo ̈st ist, soll dieser Automat noch implementiert werden, um
eine komplette Simulation zu erhalten.

Die Zusta ̈nde werden am besten mit ganzen Zahlen codiert: Nummerieren Sie alle Zusta ̈nde der Reihe nach durch. Da bei einer Transition immer der Bauer mit dabei ist, reicht es aus, die drei Dinge und Nichts mit ganzen Zahlen zu codieren.

Implementieren Sie eine Klasse, mit einer Funktion
public static int bootFahren(int aktuellerZustand, int ding),
die die Zustandsu ̈bergangstabelle des Automaten implementiert. Die Funktion soll den Folge-

zustand als Funktionswert zuru ̈ckgeben. Fu ̈r nicht definierte Fa ̈lle, kann die Funktion einfach -1 zuru ̈ckgeben. Sie werden viele Fallunterscheidungen beno ̈tigen.

Sie ko ̈nnen die Klasse noch um eine weitere Funktion erweitern, die einen Zustand als Parameter u ̈bergeben bekommt, um dann einen zugeho ̈rigen Text auf dem Bildschirm auszugeben, wie etwa ”Linkes Ufer: Bauer und Huhn. Rechtes Ufer: Fuchs und Getreide” oder ”Fuchs frisst Huhn”.

Rufen Sie die Methoden alle in der richtigen Reihenfolge auf, so dass der Bauer alles vom linken zum rechten Ufer schafft

Java:
package Aufgabenblatt5;

public class Bauer {
   
   
    public static int bootFahren(int aktuellerZustand, int ding)    {
       
        int folgeZustand = 0;
                                                               
        if (aktuellerZustand == 0)    {
            switch (ding) {
            case 0 : folgeZustand = 2;
            break;
            case 1 : folgeZustand = 1;
            break;
            case 2 : folgeZustand = 4;
            break;
            case 3 : folgeZustand = 3;
            }
        }
        if (aktuellerZustand == 4)    {
            switch (ding) {
            case 0 : folgeZustand = 5;
            break;
            case 1 : folgeZustand = -1;
            break;
            case 2 : folgeZustand = 0;
            break;
            case 3 : folgeZustand = -1;
            }
        }
        if (aktuellerZustand == 5)    {
            switch (ding) {
            case 0 : folgeZustand = 4;
            break;
            case 1 : folgeZustand = 8;
            break;
            case 2 : folgeZustand = -1;
            break;
            case 3 : folgeZustand = 6;
            }
        }
        if (aktuellerZustand == 6)    {
            switch (ding) {
            case 0 : folgeZustand = 13;
            break;
            case 1 : folgeZustand = -1;
            break;
            case 2 : folgeZustand = 7;
            break;
            case 3 : folgeZustand = 5;
            }
        }
        if (aktuellerZustand == 7)    {
            switch (ding) {
            case 0 : folgeZustand = 3;
            break;
            case 1 : folgeZustand = 10;
            break;
            case 2 : folgeZustand = 6;
            break;
            case 3 : folgeZustand = -1;
            }
        }
        if (aktuellerZustand == 8)    {
            switch (ding) {
            case 0 : folgeZustand = 14;
            break;
            case 1 : folgeZustand = 5;
            break;
            case 2 : folgeZustand = 9;
            break;
            case 3 : folgeZustand = -1;
            }
        }
        if (aktuellerZustand == 9)    {
            switch (ding) {
            case 0 : folgeZustand = 1;
            break;
            case 1 : folgeZustand = -1;
            break;
            case 2 : folgeZustand = 8;
            break;
            case 3 : folgeZustand = 10;
            }
        }       
        if (aktuellerZustand == 10)    {
            switch (ding) {
            case 0 : folgeZustand = 11;
            break;
            case 1 : folgeZustand = 7;
            break;
            case 2 : folgeZustand = -1;
            break;
            case 3 : folgeZustand = 9;
            }
        }
        if (aktuellerZustand == 11)    {
            switch (ding) {
            case 0 : folgeZustand = 10;
            break;
            case 1 : folgeZustand = -1;
            break;
            case 2 : folgeZustand = 12;
            break;
            case 3 : folgeZustand = -1;
            }
        }
        aktuellerZustand = folgeZustand;
       
    return aktuellerZustand;
    }
   
    public static void main(String[] args)    {
       
        switch (bootFahren(4,0)) {
        case -1: System.out.println("Nicht definierter Fall.");
        break;
        case 0:  System.out.println("Linkes Ufer: Bauer, Fuchs, Huhn und Getreide. Rechtes Ufer: Leer.");
        break;
        case 1:  System.out.println("Huhn frisst Getreide.");
        break;
        case 2:  System.out.println("Fuchs frisst Huhn oder Huhn frisst Getreide.");
        break;
        case 3:  System.out.println("Fuchs frisst Huhn.");
        break;
        case 4:  System.out.println("Linkes Ufer: Fuchs und Getreide. Rechtes Ufer: Bauer und Huhn.");
        break;
        case 5:  System.out.println("Linkes Ufer: Bauer, Fuchs und Getreide. Rechtes Ufer: Huhn.");
        break;
        case 6:  System.out.println("Linkes Ufer: Fuchs. Rechtes Ufer: Bauer, Huhn und Getreide.");
        break;
        case 7:  System.out.println("Linkes Ufer: Bauer, Fuchs und Huhn. Rechtes Ufer: Getreide.");
        break;
        case 8:  System.out.println("Linkes Ufer: Getreide. Rechtes Ufer: Bauer, Fuchs und Huhn.");
        break;
        case 9:  System.out.println("Linkes Ufer: Bauer, Huhn und Getreide. Rechtes Ufer: Fuchs.");
        break;
        case 10: System.out.println("Linkes Ufer: Huhn. Rechtes Ufer: Bauer, Fuchs und Getreide.");
        break;
        case 11: System.out.println("Linkes Ufer: Bauer und Huhn. Rechtes Ufer: Fuchs und Getreide.");
        break;
        case 12: System.out.println("Linkes Ufer: Leer. Rechtes Ufer: Bauer, Fuchs, Huhn und Getreide. Sie haben das Rätsel gelöst. Glückwunsch!");
        break;
        case 13: System.out.println("Huhn frisst Getreibe.");
        break;
        case 14: System.out.println("Fuchs frisst Huhn.");
        }
    }
}
 
X

Xyz1

Gast
Ein Bauer (B), ein Huhn (H), ein Fuchs (F) und Getreide (G) befinden sich am Ufer eines Flusses. Der Bauer mo ̈chte mit einem Boot alles auf das andere Ufer bringen. Leider kann der Bauer nur sich und ho ̈chstens eins der drei Dinge mit ins Boot nehmen. Wenn allerdings der Fuchs mit dem Huhn ohne den Bauern zusammen an einem Ufer bleibt, frisst der Fuchs das Huhn. Wenn das Huhn ohne den Bauern mit dem Getreide an einem Ufer bleibt, dann frisst das Huhn das Getreide. In welcher Reihenfolge muss der Bauer mit einem der drei Dinge von einem zu anderen Ufer fahren, damit sich alle zu Schluss am anderen Ufer befinden?
Bauernschläue:
Diese Aufgabe ist bereits gelöst. Es ist egal, in welcher Reihenfolge der Bauer BHFG von Ufer A nach B bringt - DENN: Auch wenn ein Tier/Gegenstand vom anderen gefressen wird, befinden sich beide nach dem Transport an Ufer B. :)

Die Aufgabenstellung muss nicht lauten, bringe alle von Ufer A nach B, sondern verhindere, dass eine Tier ein anderes Tier/Gegenstand frisst.

Ansonsten schaut das nach (D/N)EA aus.

Suche nach: java implement state machine
http://vanillajava.blogspot.de/2011/06/java-secret-using-enum-as-state-machine.html
 
X

Xyz1

Gast
Bearbeitung:
Ich habe mich etwas damit beschäftigt, und so schaut es jetzt:
graphi.png
Gesucht wäre also ein Programm, das den kürzesten Weg bis nach |BHFG X, ohne über rote Vertexes, findet.

Bearbeitung 2:
Die Darstellung ist vielleicht etwas gewöhnungsbedürftig. :D
 
X

Xyz1

Gast
oO da hast du dir aber Arbeit gemacht, ich hab aber leider keine Ahnung wie ich das Programm in Java umsetzen soll
Eigentlich ist das schwere, was man in den SuchGraph mit rein nimmt, also auch ungültige Zustände (Fuchs frisst Huhn oder Huhn frisst Getreide, wenn unbeobachtet ... ), keine Zyklen usw.
Du schaust, 6, 8, 10 wären gültige Fertig-Zustände, aber welcher davon ist am schnellsten ohne rote Nodes zu erreichen?
Der Algorithmus dafür ist eigentlich relativ simple. Den Graph hatte ich mit GraphViz gezeichnet, das übernimmt alles.

Also, wenn du noch einen Code hast, dann zeigen usw.^^
 
Java:
public class Bauer {
   
   
    public static int bootFahren(int aktuellerZustand, int ding)    {
       
        int folgeZustand = 0;
                                                               
        if (aktuellerZustand == 0)    {
            switch (ding) {
            case 0 : folgeZustand = 2;
            break;
            case 1 : folgeZustand = 1;
            break;
            case 2 : folgeZustand = 4;
            break;
            case 3 : folgeZustand = 3;
            }
        }
        if (aktuellerZustand == 4)    {
            switch (ding) {
            case 0 : folgeZustand = 5;
            break;
            case 1 : folgeZustand = -1;
            break;
            case 2 : folgeZustand = 0;
            break;
            case 3 : folgeZustand = -1;
            }
        }
        if (aktuellerZustand == 5)    {
            switch (ding) {
            case 0 : folgeZustand = 4;
            break;
            case 1 : folgeZustand = 8;
            break;
            case 2 : folgeZustand = -1;
            break;
            case 3 : folgeZustand = 6;
            }
        }
        if (aktuellerZustand == 6)    {
            switch (ding) {
            case 0 : folgeZustand = 13;
            break;
            case 1 : folgeZustand = -1;
            break;
            case 2 : folgeZustand = 7;
            break;
            case 3 : folgeZustand = 5;
            }
        }
        if (aktuellerZustand == 7)    {
            switch (ding) {
            case 0 : folgeZustand = 3;
            break;
            case 1 : folgeZustand = 10;
            break;
            case 2 : folgeZustand = 6;
            break;
            case 3 : folgeZustand = -1;
            }
        }
        if (aktuellerZustand == 8)    {
            switch (ding) {
            case 0 : folgeZustand = 14;
            break;
            case 1 : folgeZustand = 5;
            break;
            case 2 : folgeZustand = 9;
            break;
            case 3 : folgeZustand = -1;
            }
        }
        if (aktuellerZustand == 9)    {
            switch (ding) {
            case 0 : folgeZustand = 1;
            break;
            case 1 : folgeZustand = -1;
            break;
            case 2 : folgeZustand = 8;
            break;
            case 3 : folgeZustand = 10;
            }
        }       
        if (aktuellerZustand == 10)    {
            switch (ding) {
            case 0 : folgeZustand = 11;
            break;
            case 1 : folgeZustand = 7;
            break;
            case 2 : folgeZustand = -1;
            break;
            case 3 : folgeZustand = 9;
            }
        }
        if (aktuellerZustand == 11)    {
            switch (ding) {
            case 0 : folgeZustand = 10;
            break;
            case 1 : folgeZustand = -1;
            break;
            case 2 : folgeZustand = 12;
            break;
            case 3 : folgeZustand = -1;
            }
        }
        aktuellerZustand = folgeZustand;
       
    return aktuellerZustand;
    }
   
    public static void main(String[] args)    {
       
        switch (bootFahren(4,0)) {
        case -1: System.out.println("Nicht definierter Fall.");
        break;
        case 0:  System.out.println("Linkes Ufer: Bauer, Fuchs, Huhn und Getreide. Rechtes Ufer: Leer.");
        break;
        case 1:  System.out.println("Huhn frisst Getreide.");
        break;
        case 2:  System.out.println("Fuchs frisst Huhn oder Huhn frisst Getreide.");
        break;
        case 3:  System.out.println("Fuchs frisst Huhn.");
        break;
        case 4:  System.out.println("Linkes Ufer: Fuchs und Getreide. Rechtes Ufer: Bauer und Huhn.");
        break;
        case 5:  System.out.println("Linkes Ufer: Bauer, Fuchs und Getreide. Rechtes Ufer: Huhn.");
        break;
        case 6:  System.out.println("Linkes Ufer: Fuchs. Rechtes Ufer: Bauer, Huhn und Getreide.");
        break;
        case 7:  System.out.println("Linkes Ufer: Bauer, Fuchs und Huhn. Rechtes Ufer: Getreide.");
        break;
        case 8:  System.out.println("Linkes Ufer: Getreide. Rechtes Ufer: Bauer, Fuchs und Huhn.");
        break;
        case 9:  System.out.println("Linkes Ufer: Bauer, Huhn und Getreide. Rechtes Ufer: Fuchs.");
        break;
        case 10: System.out.println("Linkes Ufer: Huhn. Rechtes Ufer: Bauer, Fuchs und Getreide.");
        break;
        case 11: System.out.println("Linkes Ufer: Bauer und Huhn. Rechtes Ufer: Fuchs und Getreide.");
        break;
        case 12: System.out.println("Linkes Ufer: Leer. Rechtes Ufer: Bauer, Fuchs, Huhn und Getreide. Sie haben das Rätsel gelöst. Glückwunsch!");
        break;
        case 13: System.out.println("Huhn frisst Getreibe.");
        break;
        case 14: System.out.println("Fuchs frisst Huhn.");
        }
    }
}

also soweit bin ich momentan, wäre cool wenn du mir eine kleine "Anfangs"-Hilfestellung geben könntest ;)
 
X

Xyz1

Gast
Also, meine Klasse heißt auch Bauer. Sonst habe ich es aber komplett anders gemacht.
Ich würd an dieser Stelle vielleicht @JStein52 oder @Meniskusschaden mit in das Boot holen ---- es ist verdächtig, das sie sich nicht mehr melden. :D Ich selber bin überfragt! :(
 
ich steh eig momentan nur vor dem Problem das mein Programm nach einer Eingabe bzw. Schritt zu ende ist und ich es nicht richtig hinbekomme alles in eine schleife zu packen, mein aktueller zustand zu speichern und von dem aktuellen zustand durch eine neue Eingabe zu einem neuen Zustand zu kommen ^^
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Etwas unsicher wie es weitergehen soll Java Basics - Anfänger-Themen 2
S Klassen Dekompilen eines Programms unsicher? Java Basics - Anfänger-Themen 6
D Getter Mehtode Unsicher Java Basics - Anfänger-Themen 6
J JAVA zu unsicher für MYSQL? Java Basics - Anfänger-Themen 4
Alen123 Wie würdet ihr diese Aufgabenstellung lösen? Java Basics - Anfänger-Themen 18
N Widerspruch in Aufgabenstellung? Java Basics - Anfänger-Themen 2
F Wie implementiere ich diese Aufgabenstellung? Java Basics - Anfänger-Themen 16
F Aufgabenstellung genauer formulieren/verständlicher machen? Java Basics - Anfänger-Themen 10
A Vererbung Hilfe bei einer Aufgabenstellung Java Basics - Anfänger-Themen 3
D Erste Schritte Hilfe bei Aufgabenstellung Java Basics - Anfänger-Themen 1
M Verbunde Aufgabenstellung Java Basics - Anfänger-Themen 6
N kleine get-Methode anhand einer Aufgabenstellung Java Basics - Anfänger-Themen 13
H Problem mit Aufgabenstellung Java Basics - Anfänger-Themen 3
B verständnisprobleme bei Aufgabenstellung Java Basics - Anfänger-Themen 25
M Gibt es eine einfachere Variante diese Aufgabenstellung zu lösen? Java Basics - Anfänger-Themen 11
J Rekursionsproblem/Aufgabenstellung Java Basics - Anfänger-Themen 9
J Erste OO-Aufgabe-Probleme mit Aufgabenstellung Java Basics - Anfänger-Themen 32
G Nebenläufigkeit - Aufgabenstellung Java Basics - Anfänger-Themen 13
A aufgabenstellung tips Java Basics - Anfänger-Themen 7
M Zwei Lösungsvorschläge für eine Aufgabenstellung gesucht Java Basics - Anfänger-Themen 3
A verstehe aufgabenstellung nicht! Java Basics - Anfänger-Themen 47
E Klassen erkennen in einer Aufgabenstellung Java Basics - Anfänger-Themen 6
W Vererbung: Aufgabenstellung Java Basics - Anfänger-Themen 15
G Aufgabenstellung in JAVA, wie anfangen ? Java Basics - Anfänger-Themen 13

Ähnliche Java Themen

Neue Themen


Oben