Welchen Fehler habe ich in dem Java Code gemacht?
Hallo,
ja ich bin ein blutiger Anfänger (also lacht ruhig über die Frage) und versuche mir Java selbst beizubringen. Ich hab eine Frage zu den if/else Verzweigungen. Ich hab mit denen ein Quiz gebaut. Jedoch bekomme kein Feedback (sprich Richtig / Falsch) angezeigt. Was kann ich tun? Bzw wo ist der Fehler im Code?
MfG
Nico
4 Antworten
Dass man Strings mit equals vergleichen muss, haben die anderen ja schon gesagt. Mach dir keine Gedanken, das hat am Anfang wahrscheinlich so ziemlich jeder falsch gemacht. Einer der Gründe, warum ich C# lieber mag. Dort kann man den == Operator überladen und damit die gleiche Funktion einbauen, wie für equals.
Ich würde dir noch empfehlen, dass du im if nur prüfst, ob die richtige Antwort eingegeben wurde und für jede andere Eingabe "Falsch" ausgibst, also:
if (eingabe1.equalsIgnoreCase("b")) {
System.out.println("Richtig");
} else {
System.out.println("Falsch");
}
Die Methode "equalsIgnoreCase", die ich benutzt habe, ignoriert bei der Eingabe die Groß-/Kleinschreibung. Man könnte also auch ein großes B eingeben, und es wäre richtig.
Alternativ kannst du es auch so lassen, wie du es jetzt hast, aber zusätzlich noch abfragen, was passieren soll, wenn man etwas eingibt, was nicht in der Liste steht. Also unter das letzte "Falsch" noch:
} else {
System.out.println("Die Eingabe \"" + eingabe1 + "\" ist nicht in den Antwortmöglichkeiten enthalten.");
}
Als nächstes kannst du dir dann überlegen, wie du leicht viele Fragen und Antworten in dein Programm kriegst, zufällige Fragen auswählst und die Antwortmöglichkeiten automatisch durcheinanderwürfelst, ohne dass das Programm vergisst, welche Antwort die richtige ist.
brauchst die Anführungszeichen glaube ich nicht
Aber 2 Sachen:
Wieso verwendest du ein String kein Char? String ist größer und komplizierter.
Else fehlt, falls jemand d eingibt sollte es ja auch was ausgeben und nicht softlocken
ups, versehentlich geliket.
welche klammern? da sind keine unnötigen xD
- Da hast du recht aber ich hatte ne Fehlermeldung bekommen als ich scan.nextChair machen wollte, deshalb den string.
- Das habe ich jetzt verändert so wie es oben erklärt wurde.
Wenn du in Java Strings vergleichst, dann nicht mit "==", sondern mit String.equals(). Also in deinem Fall
if (eingabe1.equals("a")) {
Würde dich deswegen übrigens nicht auslachen. Klar, das ist ein Anfängerfehler, aber zum einen haben den wahrscheinlich alle am Anfang ihrer Programmier-Laufbahn gemacht und zum anderen ist string.equals schon ziemlich tricky. Hier ist das glaub ich ganz gut erklärt
Naja, was heißt "der Fehler"? Mit einer Char-Umwandlung könnte der Fragesteller das Problem auch lösen, wäre halt eine andere Möglichkeit. Meiner Meinung nach eine etwas Schlechtere, aber das ist eine Kleinigkeit. Unabhängig von der Aufgabenstellung sollte man string.equals() aber kennen und verstehen.
Letztlich ist das Problem, dass Strings Objekte sind und da der Vergleich über Referenzen (also Speicheradressen) läuft, während bei Basistypen (wie z.B. chars) der Wert direkt verglichen wird.
Ich würde Dir einen Switch empfehlen:
switch (eingabe1) {
case "a":
System.out.println("Falsch");
break;
case "b":
System.out.println("Richtig");
break;
default:
break;
}
Das ist die einfache, redundante und übersichtlichere Version.
MfG
Zum einen ist Redundanz etwas, was man in seinem Quellcode nicht haben möchte, zum anderen wird ein Switch reichlich unflexibel, wenn man das Quiz mal erweitert und irgendwo mehrere Fragen mit unterschiedlichen Antwortmöglichkeiten gespeichert werden sollen.
Wieso sollte man denn seinen Code nicht redundant halten wollen? Also ich habe meinen Code immer schön kurz, damit ich keine großen Dateien habe.
Außerdem habe ich mich hier auf den obigen Cuellcode bezogen.
MfG
Kann es sein, dass du unter "Redundanz" irgendetwas anderes verstehst als... als das, was es eigentlich ist? https://de.wikipedia.org/wiki/Redundanter_Code
Ok, danke werd ich so mal versuchen. Und wie ich sehe hast du ne Ausbildung zum Fiae. Ich hab da ein paar Fragen, kannst du mir die vielleicht mal beantworten.
True. Aber bei chars gehts normal. Is der fehler dass ers nich zu nem char umwandelt?