Java 尝试重复,直到条件为假

Java 尝试重复,直到条件为假,java,while-loop,Java,While Loop,我试图创建一个循环,直到用户输入正确的信息(没有空格或空白)为止。这是我到目前为止所做的,但它只重复了一次。我希望重复此操作,直到用户填写正确的名称,例如Oskar/Oskar/Oskar System.out.print("Name: "); String name = scanner.nextLine(); name = name == null ? "" : name.trim(); while(name.isEmpty()) { Syste

我试图创建一个循环,直到用户输入正确的信息(没有空格或空白)为止。这是我到目前为止所做的,但它只重复了一次。我希望重复此操作,直到用户填写正确的名称,例如Oskar/Oskar/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;
    }

执行此操作时:
name=name1
,您将用户提供给您的任何内容都放入
name
,因此
while(name.isEmpty())
将不再是
真的

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

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

当且仅当用户提供
Oskar
作为名称时,上面的代码将覆盖
name
变量。

可能您需要以下内容:

 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;
        }

正如其他人所说,一旦有一些非空字符串输入,代码将退出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();
    }
Set desiredSet=newhashset(Arrays.asList(“XYZ”、“OSKAR”);
系统输出打印(“名称:”);
字符串名称=scanner.nextLine();
name=name==null?“”:name.trim();
while(name.isEmpty()&&!desiredSet.contains(name.toUpperCase())){
System.out.println(“错误数据”);
系统输出打印(“名称:”);
name=scanner.nextLine().trim();
}

不需要额外的变量
name1

您需要使用
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”请重试
输入您的姓名:奥斯卡
欢迎奥斯卡


也许第二行name1不再是空的

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

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

您可以开始在循环内部接受,而不是在循环外部接受:

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;
}

这是因为名称不再为空。只有名称为空时,循环才能工作。您希望用户输入名称并检查他是否输入了内容。对吗?同时,您似乎忘记了trim()loop@MathewsMathai是的,我希望使用此循环,因为我希望确保用户输入真实姓名,而不仅仅是“”。然后在循环中使用
name=scanner.nextLine().trim()
。(你不需要
name1
)你可以扔掉那些代码,只需写
String name=“desiredName”然后。在这种情况下,您将错过输入的msg
错误名称。我想我也需要使用flag来维护它。@AadityaGavandalkar ok fixed非常感谢,非常有帮助@Tom编辑过…我习惯于比较很多整数..这就是为什么首先想到
=
的原因..最后一件事:因为
break
在else分支中,所以不需要
if
分支中的
continue
。你的
while
循环头仍然需要一些东西:D.@Tom在java中带有空头的while循环不是有效的吗?不,while
循环需要一个表达式来计算。您的意思可能是(;)
,它作为无限循环有效。