字符串输入的java用户验证,直到给出正确的输入

时间:2018-02-05 23:17:33

标签: java

如何使用while循环继续要求用户重复输入有效答案,直到给出有效输入并在给出有效输入时结束程序?我只知道如何使用int和数字。我被信件弄糊涂了。我应该如何应用NOT运算符或其他逻辑运算符|| &&

Scanner myScan = new Scanner(System.in);                                        
System.out.println("Enter food");                                       
String food = myScan.nextLine();

if (food.equalsIgnoreCase("b"))
{
    System.out.println("beans");
}
else if (food.equalsIgnoreCase("e"))                                        
{
    System.out.println("eggs");
}
else
{
    System.out.println("error");
}

4 个答案:

答案 0 :(得分:1)

一种方法是定义"flag" variable,然后循环直到它为“真”。 例如:

  Scanner myScan = new Scanner(System.in);
  boolean done = false;
  while (!done) {                                        
    System.out.println("Enter food");                                       
    String food = myScan.nextLine().toLowerCase();                                        
    switch (food) {
       case "b" :
         System.out.println("beans");                                      
         done = true;
         break;
       case "e" :
         System.out.println("eggs");                                       
         done = true;
         break;
       ...
       default :
         System.out.println("error");                                      
     }    
  }    

答案 1 :(得分:1)

在一个非常简单的层面上,我使用do-while循环,因为你想进入循环至少一次。然后,我使用boolean标志确定输入的有效性,并根据该标志做出进一步的确定,例如......

Scanner myScan = new Scanner(System.in);
boolean userInputCorrect = false;
String food = null;
do {
    System.out.println("Enter food");
    food = myScan.nextLine();
    userInputCorrect = food.equalsIgnoreCase("b") || food.equalsIgnoreCase("e") || food.equalsIgnoreCase("exit");
    if (!userInputCorrect) {
        System.out.println("Error");
    }
} while (!userInputCorrect);
System.out.println("You selected " + food);

扩展的解决方案可能会使用某种valid方法,我可以在其中传递String并让它根据已知值验证输入,但这可能有点超出问题的范围

正如已经指出的那样,但是其他人,将输入转换为小写一次并比较所有值会更有效,在这种情况下,使用switch语句可能更好。 ..

Scanner myScan = new Scanner(System.in);
boolean userInputCorrect = false;
String food = null;
do {
    System.out.println("Enter food");
    food = myScan.nextLine();
    switch (food.toLowerCase()) {
        case "b":
        case "e":
        case "exit":
            userInputCorrect = true;
            break;
        default:
            System.out.println("Error");
    }
} while (!userInputCorrect);
System.out.println("You selected " + food);

但你也可以......

food = myScan.nextLine().toLowerCase();
userInputCorrect = food.equals("b") || food.equals("e") || food.equals("exit");

答案 2 :(得分:0)

您也可以使用Map而不必担心添加更多食物

    Scanner myScan = new Scanner(System.in);
    System.out.println("Enter food");
    String food;

    Map<String, String> foodMap = new HashMap<>();
    foodMap.put("e", "Eggs");
    foodMap.put("b", "Beans");
    // add more food
    while (true) {
        food = myScan.nextLine();
        String value = foodMap.get(food);
        if (value == null) {
            System.out.println("Error!");
            break;
        }
        System.out.println(value);
    }

答案 3 :(得分:-1)

首先使用标志的不良做法是,你应该使用的是一种叫做 Do While Loop 的东西。

do { 
//block of code to be executed
} while(booleanExpression);

do while循环将执行do块中的代码,然后检查while表达式。

对于您的情况,您可以这样做:

Scanner myScan = new Scanner(System.in);  
String food;
do{
  System.out.println("Enter food");                                       
  food = (myScan.nextLine()).toLoweCase();
}while(!food.equals("b") || !food.equals("c"))

if (food.equals("b"))                                        
{                                       
 System.out.println("beans");                                      
}                                       
else if (food.equals("e"))                                        
{                                       
 System.out.println("eggs");                                       
}        

对于未来的打样,如果食物的数量持续增长,您可能会遇到问题。考虑使用数组或数组列表