我已经构建了这个程序来从文件中读取用户名。它会检查用户输入的用户名是否在配置文件中。现在,如果它不在文件中,它会要求您创建新用户吗?我正在尝试做的是来自用户的一些输入验证 - 这意味着,我希望他能够只用Y表示肯定,N表示否,并且只能进行5次尝试。
我的问题是我的“标记为”循环中的某些内容无法正常工作。它假设只询问用户他的用户名5次,但它永远要求,就像一个无限循环。此外,我希望它只写一次我找不到他的个人资料,所以我把它放在for循环之外,但它会在每次迭代中显示。
任何帮助都会得到帮助。
else {
System.out.println("Sorry couldn't find your user profile " + userName + ".");
// If profile wasn't found, ask to create a new one.
search:
for(int i=0; i<5; i++) {
System.out.println("Would you like to create a new user profile now? (Enter Y for yes), (Enter N for no and exit).");
try{
BufferedReader answer = new BufferedReader(new InputStreamReader(System.in));
String addNewUser = answer.readLine();
// If user pressed Y than write the new user name to myFile.txt
if (addNewUser.toLowerCase().startsWith("y")) {
if(addNewUser.length() == 1){
System.out.println("Please enter a new user name:");
BufferedReader readNewUser = new BufferedReader(new InputStreamReader(System.in));
String newUserName = readNewUser.readLine();
PrintWriter write = new PrintWriter("d:\\profile.txt");
write.print(newUserName);
write.close();
break search;
} else {
System.out.println("You've mistyped, please enter only one char:");
break;
}
} else {
System.out.println("You've mistyped, the answer can only be Y or N. Try again:");
}
答案 0 :(得分:6)
我认为你误解了break
的作用。 Break将退出循环并继续使用您的代码。打破标签可以让您突破特定的循环,但是只有1个循环,因此代码只是多余的。
您正在寻找的命令是continue
,它将跳到循环的下一次迭代。
我建议您阅读Oracle article关于休息的内容并继续。
答案 1 :(得分:0)
首先:您必须将第二个break
替换为continue
第二:纠正方法的结束。您必须检查用户是否插入了“n”:
if (addNewUser.toLowerCase().startsWith("n")) {
// do something...
}else {
System.out.println("You've mistyped, the answer can only be Y or N. Try again:");
}