我的循环是否在Java中正确设置?

时间:2017-02-15 02:11:53

标签: java while-loop

我需要编码为不同的输出返回两个不同的错误消息。 一个用户输入为空白,另一个用户输入不是y或n。我正在运行我的代码问题,只返回非y或n的错误消息,因为如果用户输入除y或n以外的任何内容,我会返回该消息。代码将为空白错误返回正确的错误消息,但之后只会返回错误消息,而不是y或n。关于如何解决这个问题的任何建议?

while (choice.isEmpty()) 
{
    System.out.println("Error! This entery is required. Try again."); 
    choice = sc.nextLine(); 
} 

while (!(choice.equalsIgnoreCase ("y") || choice.equalsIgnoreCase ("n")))
{
    System.out.println ("Error! Please enter y, Y, n, or N. Try again ");
    choice = sc.nextLine(); 
}

3 个答案:

答案 0 :(得分:3)

你可能最好用一个循环:

while (!choice.equalsIgnoreCase("y") && !choice.equalsIgnoreCase("n")) {
    if (choice.isEmpty()) {
        System.out.println("Error! This entry is required. Try again.");
    } else {
        System.out.println("Error! Please enter y, Y, n, or N. Try again.");
    }

    choice = sc.nextLine(); 
}

答案 1 :(得分:1)

我认为你只需要一个循环:

String choice = "";
do {
    choice = sc.nextLine();
    if (choice.equalsIgnoreCase("y") || choice.equalsIgnoreCase("n")) {
        break;
    }
    else {
        System.out.println ("Error! Please enter y, Y, n, or N. Try again ");
    }
} while (true);

请注意,此方法可正确处理所有输入,包括先前尚未定义输入的第一个输入。

答案 2 :(得分:0)

您没有描述您想要实现的目标,如果它是无限循环(只要sc.nextLine()返回某些内容),用户只能输入'y'或'n “:

while((choice = sc.nextLine()) != null) {
    if(choice.isEmpty()) {
        System.out.println("Error! This entry is required. Try again.");
    } else if(!choice.equalsIgnoreCase("y") && !choice.equalsIgnoreCase("n")) {
        System.out.println("Error! Please enter y, Y, n, or N. Try again.");
    } else {
        // do whatever you need
    }
}