Do-While循环中的Switch语句不会退出

时间:2013-08-02 10:27:09

标签: java loops java.util.scanner do-loops

我输入“stop”后代码没有退出 - 出于某种原因。为什么? 逐步调试显示,在我输入“stop”之后,它的值由's','t','o','p'组成,没有任何换行符等等。但是,代码仍然没有出口。有人能说出原因吗?

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!..");
}
}

4 个答案:

答案 0 :(得分:2)

  • compare Strings使用.equals()而非==,除非您真的知道自己在做什么。
inpText != "stop" //Not recommended
!"stop".equals(inpText) //recommended
  

如果源级别低于1.7,则无法为String类型的值打开。   只允许使用可转换的int值或枚举变量

答案 1 :(得分:0)

您正在使用这段代码比较指针而不是字符串:

while (inpText != "stop");

应该是这样的:

while (!"stop".equals(inpText));

答案 2 :(得分:0)

while(inpText!=“stop”); 更改为 while(!(inpText.equals(“stop”)));

答案 3 :(得分:0)

如果JDK为1.6或更低,则无法在字符串

上切换()

P.S。 打开一个String可能不是最好的解决方案在java 1.6中你只能切换int,boolean,double,long和float我相信。