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