0

我有一个验证类,可以确保用户输入是正确的。此类中的一种方法尝试验证继续应用程序关键字。假设用户能够输入 y 或 Y 继续,输入 n 或 N 退出。任何其他字母都应通过警告消息来回答,然后用户有机会输入他们的答案。这是我为该方法编写的代码。

public static String getValidContinueCode(Scanner sc, String prompt)
    {
        String choice = "";
        boolean isValid = false;

        while (isValid == false)
        {
        System.out.print(prompt);

        if (sc.next().equalsIgnoreCase("y"))
        {
            choice = sc.next();
            isValid = true;
        }
        else if (sc.next().equalsIgnoreCase("n"))
        {
            choice = sc.next();
            isValid = true;
        }
        else
        {
            System.out.println("Please enter y or n");
        }
        }
        return choice;

    }
4

2 回答 2

1

当您使用扫描仪读取sc.next()该字符时,您将无法再次读取它。当您阅读它并围绕读取值构建逻辑时,您需要存储它。

public static String getValidContinueCode(Scanner sc, String prompt) {
    String choice = "";
    boolean isValid = false;

    while (!isValid) {
        System.out.print(prompt);

        choice = sc.next();
        if (choice.equalsIgnoreCase("y")) {
            isValid = true;
        }
        else if (choice.equalsIgnoreCase("n")) {
            isValid = true;
        }
        else {
            System.out.println("Please enter y or n");
        }
    }
    return choice;

}

您可以做一些小的改进。您可能只想返回一个带有答案的布尔值。像这样。

public static boolean getValidContinueCode(Scanner sc, String prompt) {
    while (true) {
        System.out.print(prompt);

        if (sc.next().equalsIgnoreCase("y")) {
            return true;
        }
        else if (sc.next().equalsIgnoreCase("n")) {
            return false;
        }
        else {
            System.out.println("Please enter y or n");
        }
    }
}
于 2013-07-19T05:25:54.497 回答
0

试试这个

   public static void main(String[] args) {
    getValidContinueCode(new Scanner(System.in),"");
}

public static void getValidContinueCode(Scanner sc,String code) {
    code = "enter a letter";
    boolean status = true;
    while (status) {
        System.out.println(code);
        String check = sc.next();
        if (check.equalsIgnoreCase("y")) {
            sc = new Scanner(System.in);
            code = "ok";
            status = true;

        } else if (check.equalsIgnoreCase("n")) {
            sc = new Scanner(System.in);
            code = "exit";
            System.out.println("exit");
            status = false;
        } else {
            code = "retry";
            status = true;
        }

    }
}
于 2013-07-19T05:49:37.913 回答