写一个输入验证循环,要求用户输入“是”或“否”

时间:2017-04-03 14:37:26

标签: java while-loop

问题:我的代码有效,但我不明白为什么,如果不是相反的方式?如果输入"是"或"否" System.out.println("You must write 'Yes' or 'No'")应该出现在控制台中?

请向dummie解释它是如何/为何以这种方式运作的。

import java.util.Scanner;

public class YesOrNo {
    public static void main(String[] args) {
        // Checkpoint 4.6 Write an input validation loop that asks the user to enter “Yes” or “No”.
        String Input; 
        Scanner keyboard = new Scanner(System.in); 
        System.out.println("Enter Yes or No: ");
        Input = keyboard.nextLine(); 
        while (!Input.equals ("Yes") && !Input.equals ("No")){
            System.out.println("You must write 'Yes' or 'No'");
        }
    System.exit(0);
    }
}

4 个答案:

答案 0 :(得分:1)

您不会在循环中再次读取输入,因此您的输入不会改变:

while (!Input.equals("Yes") && !Input.equals("No")) {
    System.out.println("You must write 'Yes' or 'No'");
    Input = keyboard.nextLine();//<<---------------------
}

注意

为了良好的做法,不要在开头(输入)

中使用大写字母命名变量

修改

就像@Ousmane一样,Mahy Diaw在评论中说你可以看看这个Java.lang.String.equalsIgnoreCase()

答案 1 :(得分:1)

如果您再次不读取用户输入,您的代码可以/将循环播放:

Input = keyboard.nextLine(); 
while (!Input.equals ("Yes") && !Input.equals ("No")){
    System.out.println("You must write 'Yes' or 'No'");
    Input = keyboard.nextLine(); 
}

也可以考虑使用equalsIgnoreCase,这样您就可以接受来自用户的案例变体输入....

答案 2 :(得分:0)

如果条件为真,则执行while块。

您希望在输入与“是”和“否”不同时显示消息。

在java中,对于String类型,没有“不同”方法,但是有一个“等于”方法。 在这种情况下,“不同”可以被“不等于”取代。所以你想在它的同时进行显示 输入等于“是”“否”

如果我们将条件翻译成java,你会得到:

!(input.equals("Yes") || input.equals("No"))

布尔algreba说!(A||B)等于(!A && !B)

因此,您可以将上一行转换为

!input.equals("Yes") && !input.equals("No")

这应该回答您关于代码工作原理的问题。

现在代码中仍然存在问题。如果用户编写的内容与“是”或“否”不同,则消息将继续显示,用户将无法输入新值。每次执行循环时,您都必须添加代码以向用户询问新值:

while (!input.equals("Yes") && !input.equals("No")){
    System.out.println("You must write 'Yes' or 'No'");
    input = keyboard.nextLine();
}

注意:在java中,我们使用camelCase作为变量名,这就是为什么我写input而不是Input

答案 3 :(得分:0)

THX!我现在修改了代码,效果更好,我最终理解为什么:)

import java.util.Scanner;

public class YesOrNo {
   public static void main(String[] args) {
        String input; 
        Scanner keyboard = new Scanner(System.in); 
        System.out.println("Enter Yes or No: ");
        input = keyboard.nextLine(); 
        while (!input.equals ("Yes") && !input.equals ("No")){
            System.out.println("You must write 'Yes' or 'No'");
            input = keyboard.nextLine();
        }
        while (input.equals ("Yes") || input.equals ("No")){
            System.out.println("Thx");
            break;
        }
    System.exit(0); 
    }
}