试图重复直到条件为假

时间:2015-12-28 13:21:16

标签: java while-loop

我正在尝试创建一个循环,直到用户输入正确的信息(没有空格或空白)。这是我到目前为止所做的,但它只重复一次。我希望它重复,直到用户填写正确的名称,例如奥斯卡/ OSKAR /奥斯卡

    System.out.print("Name: ");
    String name = scanner.nextLine();
    name = name == null ? "" : name.trim();
    while(name.isEmpty()) {
        System.out.println("Wrong data");
        System.out.print("Name: ");
        String name1 = scanner.nextLine();
        name = name1;
    }

6 个答案:

答案 0 :(得分:4)

您需要使用do/while循环,因此您不必两次编写相同的代码:

Scanner scanner = new Scanner(System.in);

String name = null;
do { //use do while loop for this
    if (name != null)
        System.out.println("Invalid Name \"" + name + "\" Try again");

    System.out.print("Enter Your Name: ");
    name = scanner.nextLine();

    //keep looping until name is only letters
} while (!name.matches("[A-Za-z]+"));

System.out.println("Welcome " + name);

输出:

  

输入您的姓名:
  名称无效""再试一次   输入您的姓名:a1
  名称无效" a1"再试一次   输入您的姓名:1
  名称无效" 1"再试一次   输入你的名字:Oskar
  欢迎奥斯卡

答案 1 :(得分:2)

执行此操作时:name = name1;,您将用户提供的所有内容投入name,因此while(name.isEmpty())将不再是true

要解决此问题,您需要对name1变量进行一些额外验证,例如:

if("Oskar".equals(name1))    //Instead of name = name1
    name = name1;

当且仅当用户提供name作为名称时,上述代码才会覆盖Oskar变量。

答案 2 :(得分:0)

也许你需要这样的东西:

 System.out.print("Name: ");
        String name = scanner.nextLine();
        name = name == null ? "" : name.trim();
        while(!"desiredName".equals(name)) {
            System.out.println("Wrong data");
            System.out.print("Name: ");
            String name1 = scanner.nextLine();
            name = name1;
        }

答案 3 :(得分:0)

正如其他人所说,一旦有一些非空字符串输入,你的代码将退出while循环。要进行更多验证(有多个所需输入),请遵循以下方法:

    Set<String> desiredSet = new HashSet<String>(Arrays.asList("XYZ", "OSKAR"));
    System.out.print("Name: ");
    String name = scanner.nextLine();
    name = name == null ? "" : name.trim();
    while(name.isEmpty() && !desiredSet.contains(name.toUpperCase())) {
        System.out.println("Wrong data");
        System.out.print("Name: ");
        name = scanner.nextLine().trim();
    }

无需额外变量name1

答案 4 :(得分:0)

也许第二行,name1不再是空的。

PS:您还应该消除空白或空白。 循环体应如下所示:

System.out.println("Wrong data");
System.out.print("Name: ");
String name1 = scanner.nextLine();
name1 = name1 == null ? "" : name1.trim();
name = name1;

答案 5 :(得分:0)

你可以开始接受循环内部而不是在外面接受它:

String name="";
while(true )
{
     System.out.println("Enter the name");
     Scanner s=new Scanner(System.in);
     name=s.nextLine().trim();
     if(name.isEmpty())
     {
           System.out.println("Invalid.enter again");

      }
      else
      break;
}