2011-07-29 266 views
0

我已经构建了该程序从文件中读取用户名。它会检查用户输入的用户名是否在配置文件中。现在,如果它不在文件中,它会问你想创建一个新用户吗?我想要做的是从用户那里进行一些输入验证 - 也就是说,我希望他只能回答Y,肯定回答,N回答不回答,只有5次尝试。无限循环...?

我的问题是某些东西在我的“标记为”循环中无法正常工作。假设只向用户提供5次用户名,但它会永久询问,就像无限循环一样。另外,我希望它只给用户写一次我找不到他的配置文件,所以我把它放在for循环之外,但它在每次迭代中都会显示出来。

任何帮助将被appericiated。

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

你能发表更多的代码吗?你在那里的东西似乎是零散的,并没有太多的帮助。 – hwrdprkns

+0

标签的要点是什么?你可以删除它,并且“break;'而不是'break search;'。 –

+4

你的代码*真的很难读取你已经搞砸的缩进...修正缩进可能会使它更清晰。 –

回答

6

我认为你误解了break的功能。休息会退出循环并继续使用您的代码。打破标签允许你摆脱特定的循环,但是你只有1个循环,所以代码只是多余的。
您正在查找的命令是continue,它将跳到循环的下一次迭代。

我建议读这个Oracle article关于休息和继续。

+1

不,“break”没有转到。它将会破坏标有标签但不重新启动的循环! –

+0

你说得对,我会编辑我的答案,谢谢! – Jon7

0

首先:您必须用continue替换第二个break
二:纠正方法的结束。你必须检查用户是否插入了“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:"); 
}