Java-Rätsel: Mein erster Versuch

Status
Nicht offen für weitere Antworten.

ChackZz

Mitglied
So, ich studiere seit Anfang Oktober Wirtschaftsinformatik. Im 1. Semester gibt es Programmierung, im speziellen Java. Nach zwei Vorlesungen hab ich mich mal an eine Übungsaufgabe gemacht:

Aufgabe:
Emil leiht Thomas nicht sein Fahrrad. Paul geht heute schwimmen oder Anna geht heute schwimmen. Wenn Thomas nicht Fahrrad fährt, dann geht Isabell heute einkaufen. Thomas fährt genau dann Fahrrad, wenn Emil Thomas sein Fahrrad leiht. Wenn Isabell heute einkaufen geht, dann geht Paul heute nicht schwimmen. Frage: Geht Anna heute schwimmen?

Schreibe ein Java-Programm, welches das Rätsel löst.


Ich hab es mal versucht und es lief auch ganz ok, denke ich. Ist wohl noch sehr sehr umständlich, aber zunächst würde mich interessieren, ob das Ergebnis überhaupt richtig ist. Mein Code:

Code:
public class Aufgabe2 {
	public static void main(String[] args) {
    		boolean EmilLeihtNichtFahrrad;
    		boolean ThomasFährtFahrrad;
    		boolean IsabellGehtEinkaufen;
    		boolean PaulGehtSchwimmen;
    		boolean AnnaGehtSchwimmen;
    		AnnaGehtSchwimmen=true;
    		boolean erg;
    		EmilLeihtNichtFahrrad=true;
    			if (EmilLeihtNichtFahrrad=true)
    				ThomasFährtFahrrad=false;
    			else
    				ThomasFährtFahrrad=true;
    			if (ThomasFährtFahrrad=false)
    				IsabellGehtEinkaufen=true;
    			else
    				IsabellGehtEinkaufen=false;
    			if (IsabellGehtEinkaufen=true)
    				PaulGehtSchwimmen=false;
    			else
    				PaulGehtSchwimmen=true;
    			erg=(PaulGehtSchwimmen||AnnaGehtSchwimmen);
  System.out.println("Die Aussage Anna geht schwimmen ist:");    				
System.out.println(erg);
    				}
    }

Die Namen der Variablen sind wohl nicht so pralle, aber ich brauchte das für die Übersicht. Am Ende gibt das Programm true aus, also geht Anna schwimmen. Korrekt so?

2. Wie kann man das Programm eleganter gestalten? Es besser lösen? Es optimieren?



Danke für eure Hilfe.
 

unknown_member

Bekanntes Mitglied
Code:
public class Aufgabe2 {
   public static void main(String[] args) {
          boolean EmilLeihtNichtFahrrad;
          boolean ThomasFährtFahrrad;
          boolean IsabellGehtEinkaufen;
          boolean PaulGehtSchwimmen;
          boolean AnnaGehtSchwimmen;
          AnnaGehtSchwimmen=true;
          boolean erg;
          EmilLeihtNichtFahrrad=true;
             if (EmilLeihtNichtFahrrad=true)
                ThomasFährtFahrrad=false;
             else
                ThomasFährtFahrrad=true;
             if (ThomasFährtFahrrad=false)
                IsabellGehtEinkaufen=true;
             else
                IsabellGehtEinkaufen=false;
             if (IsabellGehtEinkaufen=true)
                PaulGehtSchwimmen=false;
             else
                PaulGehtSchwimmen=true;
             erg=(PaulGehtSchwimmen||AnnaGehtSchwimmen);
  
if (erg) {
 System.out.println("Anna geht schwimmen.");                
}

else {
 System.out.println("Anna geht nicht schwimmen.");
}


                }
    }
 

Marco13

Top Contributor
Äh - nö. Wenn du die Zeile
AnnaGehtSchwimmen=true;
mal durch
AnnaGehtSchwimmen=false;
ersetzt, kommt "false" raus.

Und unknown_member's grandios-genialer Verbesserungsversuch ... ach *verkneif* ...

Du hast überall
if (EmilLeihtNichtFahrrad = true)
geschrieben (also nur EINfache "=" verwendet. Damit sind das Zuweiseungen, und keine Vergleiche. Es müßte eigentlich
if (EmilLeihtNichtFahrrad == true)
heißen, aber das kann man einfach schreiben als
if (EmilLeihtNichtFahrrad)

Und wenn du das überall machst, kommt zumindest das richtige Ergebnis raus. Man kann aber boolean-Zuweisungen einfacher machen. Sowas wie
Code:
if (einBoolean)
{
    einAndererBoolean = true;
}
else
{
    einAndererBoolean = false;
}
kann man schreiben als
Code:
einAndererBoolean = einBoolean;

Und umgekehrt
Code:
if (!einBoolean) // Entspricht "if (einBoolean == false)"
{
    einAndererBoolean = true;
}
else
{
    einAndererBoolean = false;
}
schreibt man als
Code:
einAndererBoolean = !einBoolean;


Rein inhaltlich ist zu dem Rätsel (bzw. deiner Lösung) noch zu sagen, dass einige Bedinungen nicht präzise das umsetzen, was in der "natürlichen" Sprache beschrieben ist. Das habe ich mal versucht.... werde das aber erstmal nicht hier posten. Nur so viel als Tipp: Wenn in deinem Programm nicht mindestens einmal eine Zeile vorkommt wie
Code:
            System.out.println("Man kann die Frage nicht beantworten");
hast du etwas falsch gemacht :wink:
 

Leroy42

Top Contributor
Marco13 hat gesagt.:
Nur so viel als Tipp: Wenn in deinem Programm nicht mindestens einmal eine Zeile vorkommt wie
Code:
            System.out.println("Man kann die Frage nicht beantworten");
hast du etwas falsch gemacht :wink:

Richtig!

Ich würde sogar behaupten dass dein Lehrer eine, zumindest für Java,
hirnrissige Aufgabe gestellt hat.

Solcher Art Aufgabenstellungen kann man viel eher
in Prolog stellen und lösen lassen.
 

Marco13

Top Contributor
Naja... vermutlich (hoffentlich!?) ging es dem Aufgabensteller nicht zuletzt darum, ein bißchen Logik zu üben... (Mit Prolog wär' das ja arm, das nimmt einem da ja die ganze Arbeit ab :bae: :wink: )
 

Leroy42

Top Contributor
Marco13 hat gesagt.:
Naja... vermutlich (hoffentlich!?) ging es dem Aufgabensteller nicht zuletzt darum, ein bißchen Logik zu üben... (Mit Prolog wär' das ja arm, das nimmt einem da ja die ganze Arbeit ab :bae: :wink: )

Richtig. Ich weiss jetzt auch nicht ob dieses Logikproblem auf
diese Weise eindeutig zu lösen ist (bin zu faul das jetzt nachzuprüfen).
Allgemeine Logikprobleme kann man, auf diese Art, jedenfalls nicht lösen.

P.S. Ich habe mal ein Prolog-Programm entwickelt, dass alle Rätsel
aus dem Buch Ritter und Schurken lösen konnte.

Das war auch in Prolog nicht gerade einfach!
 

Ariol

Top Contributor
Wenn man die Variablen in der richtigen Reihenfolge setzt und direkt in Abhängigkeit voneinander setzt funktionierts so (hoffentlich richtig...):

Code:
public static void main(String[] args)
	{
		boolean emilLeihtFahrrad = false;
		boolean thomasFaehrtFahrrad = emilLeihtFahrrad;
		boolean isabellGehtEinkaufen = !thomasFaehrtFahrrad;
		boolean paulGehtSchwimmen = !isabellGehtEinkaufen;
		boolean annaGehtSchwimmen = !paulGehtSchwimmen;
		
		System.out.println(annaGehtSchwimmen);
	}
 

Marco13

Top Contributor
"Funktionieren" ist ein dehnbarerer Begriff :wink: Es liefert (in diesem Fall) die richtige Ausgabe, nur wie es zu dieser Ausgabe kommt, ist NICHT richtig.
 

Marco13

Top Contributor
Hm. Nicht so richtig. Es besteht z.B. ein Unterschied zwischen "...dann, wenn..." und "... genau dann, wenn...". Und auch sonst sind da einige ungerechtfertigte Annahmen drin verbaut.
 

Marco13

Top Contributor
Aus der Aussage
"WENN ich einen Schimmel sehe, DANN sehe ich ein Pferd"
folgt NICHT die Aussage
"WENN ich keinen Schimmel sehe, DANN sehe ich kein Pferd"

Aus der Aussage
"GENAU DANN, WENN ich einen Schimmel sehe, sehe ich ein weißes Pferd"
folgt aber die Aussage
"WENN ich keinen Schimmel sehe, DANN sehe ich kein weißes Pferd"

Man kann aus dem nicht-erfüllt-sein des "dann"-Teils genau dann auf das nicht-erfüllt-sein des "wenn"-Teils schließen, wenn beide in einer "genau dann, wenn"-Aussage verwendet wurden :cool:

Lust auf ein kleines Logik-Rätsel?

Es gibt zwei Preise: Ein Auto und einen Schlüsselanhänger.
Wenn du eine wahre Aussage machst, dann bekommst du den Schlüsselanhänger.
Wenn du eine falsche Aussage machst, dann bekommst du den Schlüsselanhänger NICHT.
Was mußt du sagen, um das Auto zu bekommen?

EDIT: Das Rätsel hat mit der Aufgabe nicht direkt was zu tun ... fiel mir nur gerade so ein... :roll:
 

Ariol

Top Contributor
ja, ok habs verstanden, aber dann ist die obige aufgabe nicht lösbar, weil man nicht weiß, ob issabel einkaufen geht.


Zu deiner Aufgabe:

Kann man nicht lösen.
Bekommt man das Auto :
- zusätzl zum Schlüsselanhänger?
- garnicht?
- nur wenn man den Schlüsselanhänger nicht bekommt?
- ganz anderer Fall
 

Marco13

Top Contributor
Zur Aufgabe: Man kann aus "Emil leiht Thomas nicht sein Fahrrad." eindeutig folgern, dass Anna heute schwimmen geht. Aber wenn die Aussage "Emil leiht Thomas nicht sein Fahrrad." NICHT efüllt ist, kann man daraus NICHT folgern, ob Anna schwimmen geht oder nicht.

@Ariol: Das Rätsel ist lösbar. Man braucht keine Aussage darüber zu machen, wann man das Auto gewinnt und wann nicht.

@Wildcard: Die Aussage "Ich bekomme den Schlüsselanhänger nicht" führt zwangsläufig zu einem Widerspruch:
1. Man bekommt Nichts-> Widerspruch: Man eine wahre Aussage gemacht hat, und bekommt trotzdem nicht den Schlüsselanhänger.
2. Man bekommt den Schlüsselanhänger: Widerspruch. Man hat eine falsche Aussage gemacht hat, und bekommt trotzdem den Schlüsselanhänger.
3. Man bekommt beides: Geleicher Widerspruch wie bei 2.
4. Man bekommt das Auto: Gleicher Widerspruch wie bei 1.

Aber der Ansatz, Widersprüche bzw. nicht-Widersprüche zu erzwingen ist schon richtig....
 

Marco13

Top Contributor
@Ariol: Damit ergeben sich die gleichen Widersprüche wie bei Wildcard's erster Antwort.

@Wildcard: Ich glaube, das ist richtig. Man bekommt....
Nichts -> Widerspruch, weil die Aussage wahr ist man aber den Anhänger nicht bekommt
Anhänger -> Widerspruch, weil man den Anhänger bekommt, obwohl die Aussage falsch war
Beides -> Kein Widerspruch: Man macht eine wahre Aussage, und bekommt den Schlüsselanhänger
Auto -> Kein Widerspruch. Man macht eine falsche Aussage, und bekommt den Schlüsselanhänger nicht.

Eine (kürzere) Aussage, mit der man das Auto gewinnt, ist: "Ich gewinne keinen Preis". Die Möglichkeiten:
Nichts -> Widerspruch, weil die Aussage wahr ist man aber den Anhänger nicht bekommt
Anhänger -> Widerspruch, weil man den Anhänger bekommt, obwohl die Aussage falsch war
Beides -> Widerspruch, weil man den Anhänger bekommt, obwohl die Aussage falsch war
Auto -> Kein Widerspruch. Man macht eine falsche Aussage, und bekommt den Schlüsselanhänger nicht.

Falls ich bei den Überlegungen zu deiner Lösung jetzt keinen Flüchtigkeitsfehler gemacht habe, erstmal ein :applaus: :toll:
Mit deiner Lösung hat man sogar noch die Möglichkeit, beides zu gewinnen. Ob der Preisverleiher den wertvollen Schlüsselanhänger dann rausrückt, bleibt aber ihm überlassen :wink:
 

Wildcard

Top Contributor
Das war keine Antwort auf das Rätsel, sondern eine Aussage :bae:
Ich fürchte du wirst nun die 'gar nichts' Variante wählen :cry:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
O Rätsel Java Code Java Basics - Anfänger-Themen 8
T Geocaching Java Rätsel Java Basics - Anfänger-Themen 21
M Java Rätsel (Geocaching) - Brauch Hilfe dazu! Java Basics - Anfänger-Themen 15
J Probleme mit drucken aus Java Java Basics - Anfänger-Themen 3
Gokul Java chart library suggestion for web application? Java Basics - Anfänger-Themen 2
D wie kann ich gcc aus einer .java datei heraus aufrufen? Java Basics - Anfänger-Themen 2
S Text Formatierung in Java Java Basics - Anfänger-Themen 2
B Erste Schritte yaml parsen in Java Java Basics - Anfänger-Themen 19
C Methoden Umlaute in Java Java Basics - Anfänger-Themen 18
W Java-PRogramm liest als EXE-File Nicht USB, jedoch aus NetBeans Java Basics - Anfänger-Themen 45
W Methoden java map ersatz für c++map Java Basics - Anfänger-Themen 3
M Erste Schritte Java Primzahltester Java Basics - Anfänger-Themen 4
A csv Reader für Java? Java Basics - Anfänger-Themen 27
K Java - Enums Java Basics - Anfänger-Themen 30
tomzen Java Unterstützung für exel dateien installieren. Java Basics - Anfänger-Themen 2
Rookar java.lang.NoClassDefFoundError: org/json/JSONException Java Basics - Anfänger-Themen 2
Rookar Mit Button andere java öffnen Java Basics - Anfänger-Themen 4
F Java Object to Hashmap ? Java Basics - Anfänger-Themen 6
I Backend in Java und Ansicht von Dateien in statische HTML Seiten? Java Basics - Anfänger-Themen 15
R Input/Output Verwendung des Euro-Zeichens in Java Java Basics - Anfänger-Themen 7
I Push Nachrichten von JAVA EE App an Mobile App Java Basics - Anfänger-Themen 3
H .java Dateien in Eclipse einbinden und ausführen Java Basics - Anfänger-Themen 1
onlyxlia Schlüsselworte Was meint man mit "einen Typ" in Java erstellen? Java Basics - Anfänger-Themen 2
O Java Kara geschweifte Klammern Java Basics - Anfänger-Themen 2
G Mausrad logitech kann links und rechts klick wie in java abragen. Java Basics - Anfänger-Themen 15
XWing Java Klssenproblem Java Basics - Anfänger-Themen 4
R Umgebungsvariable java -cp gibt immer Java-Hilfe... Java Basics - Anfänger-Themen 3
farbenlos Csv Datei in Java einlesen Java Basics - Anfänger-Themen 18
F TableModelListener: java.lang.ArrayIndexOutOfBoundsException: 132 Java Basics - Anfänger-Themen 3
G Java 8 - Support-Ende Java Basics - Anfänger-Themen 7
T Java Weihnachtsbaum + Rahmen Java Basics - Anfänger-Themen 1
N Will mit Java anfangen Java Basics - Anfänger-Themen 13
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
M Java Iterator Verständnisfrage Java Basics - Anfänger-Themen 6
M Java Mail Programm Java Basics - Anfänger-Themen 4
Sniper1000 Java 391 für Windows Java Basics - Anfänger-Themen 37
G Java long- in int-Variable umwandeln Java Basics - Anfänger-Themen 6
JaZuDemNo Java im Studium Java Basics - Anfänger-Themen 7
E Java Programm zur anzeige, ob Winter- oder Sommerzeit herrscht Java Basics - Anfänger-Themen 62
I QR code in Java selber generieren Java Basics - Anfänger-Themen 5
V Java-Ausnahmebehandlung: Behandlung geprüfter Ausnahmen Java Basics - Anfänger-Themen 1
krgewb Java Streams Java Basics - Anfänger-Themen 10
A Überwältigt von der komplexen Java Welt Java Basics - Anfänger-Themen 29
O Mehrfachvererbung auf Spezifikations- und Implementierungsebene in Java. Interfaces Java Basics - Anfänger-Themen 19
John_Sace Homogene Realisierung von Generics in Java ? Java Basics - Anfänger-Themen 19
P Meldung aus Java-Klasse in Thread an aufrufende Klasse Java Basics - Anfänger-Themen 1
R mit Java API arbeiten Java Basics - Anfänger-Themen 9
P JDK installieren Probleme bei der Java-Installation Java Basics - Anfänger-Themen 8
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
Timo12345 JNLP File mit Java öffnen Java Basics - Anfänger-Themen 2
S Video Editierung mit Java.._ Java Basics - Anfänger-Themen 2
F Einstelungen in Java - CursorBlinkRate Java Basics - Anfänger-Themen 10
A PHP $_POST["name"] in Java Java Basics - Anfänger-Themen 3
vivansai21 Is there a oneliner to create a SortedSet filled with one or multiple elements in Java? Java Basics - Anfänger-Themen 9
Athro-Hiro Weißes Bild in Java erstellen Java Basics - Anfänger-Themen 3
Arjunreddy Can someone please tell me how to use a debugger in BlueJ(a Java environment) Java Basics - Anfänger-Themen 1
M Java assoziationen (UML) Java Basics - Anfänger-Themen 8
H Excel-Tabellen mit Java erstellen Java Basics - Anfänger-Themen 4
Simon16 Java ArrayListe von einer Klasse sortieren Java Basics - Anfänger-Themen 2
P Wie kann ich in meinem Java Programm etwas dauerhaft speichern? Java Basics - Anfänger-Themen 5
H Nutzt Eclipse alle CPU-Threads beim Ausführen von Java-Programmen? Java Basics - Anfänger-Themen 4
xXGrowGuruXx Java einstieg, leichte sache 0 verstanden Java Basics - Anfänger-Themen 7
A java.sql.SQLException: Data type mismatch. Java Basics - Anfänger-Themen 1
H Java-Programm zur Ausgabe von Zuständen Java Basics - Anfänger-Themen 80
N Java Spiel Figur auf dem Hintergrundbild bewegen. Java Basics - Anfänger-Themen 11
G Kann Java-Programm nicht als jar aufrufen, auch als EXE nicht Java Basics - Anfänger-Themen 19
N Java Taschenrechner hat Jemand vlt einen Tipp dafür wie ich jetzt die buttons verbinden kann und das Ergebnis auf dem textfield anzeigen lassen kann Java Basics - Anfänger-Themen 13
A Lerngruppe Java Java Basics - Anfänger-Themen 2
G Help me in the Java Program Java Basics - Anfänger-Themen 2
L Java- Vererbung Java Basics - Anfänger-Themen 4
LimDul Suche Java Stream Tutorial Java Basics - Anfänger-Themen 2
_so_far_away_ Ich möchte Java lernen Java Basics - Anfänger-Themen 11
benny1993 Java Programm erstellen für ein Fußball-Turnier Java Basics - Anfänger-Themen 3
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
V Bild per Java Script austauschen Java Basics - Anfänger-Themen 7
MoxMorris this Keyword in Java Java Basics - Anfänger-Themen 14
D Wie kann man in Java nach Arrays auf Duplikate prüfen Java Basics - Anfänger-Themen 12
wolei JAVA Zeitdifferenz feststellen. Java Basics - Anfänger-Themen 4
DiyarcanZeren Rekursion in Java Java Basics - Anfänger-Themen 5
wolei Java generic interface in a generic class Java Basics - Anfänger-Themen 6
monsterherz Ablauf der Erstellung eines Java Programmes Java Basics - Anfänger-Themen 17
monsterherz Circle.java:5: error: <identifier> expected Java Basics - Anfänger-Themen 2
julian-fr Wie kann ich am besten Java lernen? Java Basics - Anfänger-Themen 17
A Java-Properties und -RessourceBundles Java Basics - Anfänger-Themen 5
lrnz22 Java-Basics-Aufgabe Java Basics - Anfänger-Themen 8
R Java kann nicht installiert werden Java Basics - Anfänger-Themen 8
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
G In ein java Dokument Ton einbinden Java Basics - Anfänger-Themen 1
C was heisst es wenn java ']' erwartet ? Java Basics - Anfänger-Themen 2
KeinJavaFreak Erste Schritte Programm "Java(TM) Platform SE binary " nicht vorhanden Java Basics - Anfänger-Themen 1
KeinJavaFreak Erste Schritte Java "Executable Jar File" nicht vorhanden Java Basics - Anfänger-Themen 1
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
J Java Testklasse Java Basics - Anfänger-Themen 5
P Java Selenium . Parameterized.Parameters erzeugt eine Fehlermeldung Java Basics - Anfänger-Themen 14
W Java-Code mit Array Java Basics - Anfänger-Themen 14
W Java-Code Java Basics - Anfänger-Themen 2
P BeforeEach AfterEach werden nicht ausgeführt. Java / Selenium Java Basics - Anfänger-Themen 4
A Wie führe ich eine Batch-Datei von meiner Java-Anwendung aus? Java Basics - Anfänger-Themen 18
W Java code- TicTac toe Java Basics - Anfänger-Themen 51

Ähnliche Java Themen

Neue Themen


Oben