Java 尝试重复,直到条件为假
我试图创建一个循环,直到用户输入正确的信息(没有空格或空白)为止。这是我到目前为止所做的,但它只重复了一次。我希望重复此操作,直到用户填写正确的名称,例如Oskar/Oskar/OskarJava 尝试重复,直到条件为假,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
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
循环需要一个表达式来计算。您的意思可能是(;)
的,它作为无限循环有效。