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

问题描述:

问题:我的代码有效,但我不明白为什么,它应该不是相反的方式?如果输入“是”或“否”,System.out.println("You must write 'Yes' or 'No'")应该出现在控制台中?编写一个输入验证循环,要求用户输入“是”或“否”

请解释为什么它会如此/为什么这样工作。

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); 
    } 
} 
+2

在Java中,我们使用驼峰的变量.... –

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

您想要显示消息,而的输入不同于“是”和“否”

在java中,对于String类型,没有“differents”方法,但有一个“equals”方法。 在这种情况下,“不同”可以被“不等于”替代。所以你想要说明一下, 输入是不是等于“是”“否”

如果我们转换的条件为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中,我们使用驼峰的变量名,那为什么我写input,而是如果Input

+0

Thx!我现在明白了:)根据所有评论我已经修改了代码 – Chrippe

你不要在你的循环再读取输入,让你的输入没有改变过:

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

注意

对于好的做法不命名您的变量在开始上信(输入)

编辑

像@Ousmane马伊 - 迪奥说,在评论,你可以在这个Java.lang.String.equalsIgnoreCase()

+0

谢谢现在@OusmaneMahyDiaw检查我的编辑 –

你的代码,看看能/将循环永远如果你不再次读取用户输入:

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

考虑因此,使用equalsIgnoreCase,您无需接受来自用户的变体输入。

+0

@OusmaneMahyDiaw,好一个!谢谢!!! –

Thx!我修改现在的代码,工作得更好,我finaly明白为什么:)

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); 
    } 
} 
+0

第二个while循环没用。你可以让程序循环一个要求停止循环的块(即'break'指令所做的),你可以用'system.out.println(“thx”);'替换整个循环,因为它只有在前一个循环块结束后才会执行。 – jhamon

+0

啊,当然,thx! – Chrippe