Welchen Fehler habe ich in dem Java Code gemacht?

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.


nico0013 
Fragesteller
 12.08.2020, 14:14

Danke, sehr hilfreich.

0

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


MrAmazing2  11.08.2020, 22:20

ups, versehentlich geliket.

welche klammern? da sind keine unnötigen xD

0
nico0013 
Fragesteller
 12.08.2020, 14:15
  1. Da hast du recht aber ich hatte ne Fehlermeldung bekommen als ich scan.nextChair machen wollte, deshalb den string.
  2. Das habe ich jetzt verändert so wie es oben erklärt wurde.
0

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

https://mein-javablog.de/java-strings-vergleichen/


MrAmazing2  11.08.2020, 22:21

True. Aber bei chars gehts normal. Is der fehler dass ers nich zu nem char umwandelt?

0
bluebird5  11.08.2020, 22:29
@MrAmazing2

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.

1
nico0013 
Fragesteller
 12.08.2020, 14:13

Danke, sehr hilfreich.

0

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

Woher ich das weiß:Studium / Ausbildung – Fachinformatiker für Anwendungsentwicklung

bluebird5  11.08.2020, 22:31

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.

0
Ollig00  11.08.2020, 22:39
@bluebird5

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

0
nico0013 
Fragesteller
 12.08.2020, 14:16

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.

0
Ollig00  12.08.2020, 15:28
@nico0013

Klar, welche denn? Du kannst mir auch gerne eine Freundschaftsamfrage senden, damit wir uns darüber privat unterhalten können.

MfG

0