Java: "Solange nicht"?
Hallo,
folgendes Problem: Ich würde gerne die Aussage "Drücke S zum starten" solange abgespielt bekommen, bis der Spieler ein S zum Starten eingibt. Bei jedem anderen Buchstaben soll der vorherige Satz abgespielt werden.
Nur funktioniert es leider nicht.
Könnt ihr mir helfen?
String startfrage = null;
while (!(startfrage == "S")) {
System.out.println("Willkommen im Spiel!\n" + "Drücke S zum Starten!");
Scanner eingabe = new Scanner(System.in);
startfrage = String.valueOf(eingabe.next());
System.out.println("Startfrage ist gleich" + startfrage);
}
if (startfrage.equalsIgnoreCase("S")) {
PROGRAMM {
4 Antworten
Eine Problemlösung wurde dir bereits gegeben, zusätzlich möchte ich noch zwei Punkte anbringen und erklären, wieso du equals für den String-Vergleich verwenden musst.
Zuerst zu letzterem: Der Gleichheitsoperator prüft bei dem Vergleich nicht nur, ob beide Objekte denselben Wert haben, sondern ebenso, ob sie sich an der selben Speicherstelle befinden / ob es sich um dasselbe Objekt auf beiden Seiten handelt.
Die equals-Methode hingegen vergleicht nur den Wert beider String-Objekte.
Weitere Anmerkungen:
1) Du erzeugst je Schleifendurchlauf ein Scanner-Objekt, was ganz sicher nicht notwendig ist. Erstelle es nur einmal, vor der Schleife und schließe den Stream nach Beendigung wieder, sofern du den Eingabestream nicht mehr auslesen musst.
2) Die Methode next gibt dir bereits einen String zurück. Eine Umwandlung (String.valueOf) ist daher unnötig.
Was zeigt das Programm an?
In der while-Bedingung muss es ein großes S sein und in der if geht auch ein kleines? Das if sollte auch mit if(true) gehen
Hallo,
Probier mal bei deiner Abfrage ein while(!startfrage.equals("S")){....
Das müsste eigentlich gehen.
LG
do {
...
} while(!startfrage.equalsIgnoreCase("S"));
strings vergleichst du mit equals, sonst wird nur geprüft ob die referenz gleich ist.
und das ganze löst du mit einer do while schleife. diese wird mindestens immer einmal aufgerufen. die bedingung wird erst nach dem aufruf geprüft.