无限循环...?

时间:2011-07-29 14:22:42

标签: java for-loop

我已经构建了这个程序来从文件中读取用户名。它会检查用户输入的用户名是否在配置文件中。现在,如果它不在文件中,它会要求您创建新用户吗?我正在尝试做的是来自用户的一些输入验证 - 这意味着,我希望他能够只用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:");   
            }

2 个答案:

答案 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:");   
}