Switch-Anweisung innerhalb der Do-While-Schleife nicht verlassen
Den code nicht verlassen, nachdem ich den Typ "Stopp" - für einige Grund. Warum?
Step-by-step debugging zeigt, dass, nachdem ich enter "stop" ist es Wert besteht aus genau 's','t','o','p' ohne Zeilenumbrüche, etc. - allerdings ist der code noch goesn nicht verlassen. Könnte jemand sagen, warum, bitte?
import java.util.Scanner;
public class Application {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
//asking username
System.out.print("Username: ");
String username = input.nextLine();
String inpText;
do {
System.out.print(username + "$: ");
inpText = input.nextLine();
System.out.print("\n");
//analyzing
switch (inpText) {
case "start":
System.out.println("> Machine started!");
break;
case "stop":
System.out.println("> Stopped!");
break;
default:
System.out.println("> Command not recognized");
}
} while (inpText != "stop");
System.out.println("Bye!..");
}
}
- Lesen Sie diese: Wie kann ich strings vergleichen im Java? und dann fixieren Sie Ihre
while
Zustand. - Danke @jlordo. Konnte mir nicht vorstellen, der Grund war im Vergleich selbst; und die damit verknüpfte Frage deckt alles.
Du musst angemeldet sein, um einen Kommentar abzugeben.
.equals()
und nicht==
, es sei denn, Sie wirklich wissen, was Sie tun.equals()
sollte nicht!inpText.equals("stop")
mehr richtig?a.equals(b)
ist die gleiche wieb.equals(a)
. Das heißt, wenninpText = null
,inpText.equals("stop")
werfen eine NPE, aber es wird nicht ausgelöst für"stop".equals(inpText)
Du vergleichst Zeiger nicht Zeichenfolgen mit diesem Stück code:
Sollte so etwas wie dieses:
ändern while (inpText != "stop"); zu while (!(inpText.equals("stop")));
Wenn das JDK 1.6 oder niedriger können Sie nicht schalten() auf einem String
P. S.
Umschalten auf ein String ist wahrscheinlich nicht die beste Lösung ist Ja in java 1.6 können Sie nur wechseln, int, boolean, double, long, und float, glaube ich.