3

我有一个真正的新手问题。我想向用户询问密码 3 次。3次后,如果密码仍然输入错误,我想退出该块。

这就是我目前所拥有的。但我坚持最后的陈述。如果第一次密码不正确,最终的'false'将覆盖while循环中的'true'语句。

public boolean checkOwnerPassword2()
    {
        String password = "123";
        String s = userInput();
        if(s.equals(password))
        return true;
        else
        {
            int i = 0;
            while(!(s.equals(password)) && i < 2)
            {
                if(s.equals(password))
                return true;
                else
                {
                    System.out.println("Try again");
                    s = userInput();
                    i++;

                }   
            }
        }
        return false;
    }

在其他地方我使用以下代码:

if(checkOwnerPassword2())
addPrizeToList();
else
System.out.println("sorry you can't add prize!");

这是我编辑的版本:

4

3 回答 3

2

您可以这样做的最简单方法。

    public boolean checkOwnerPassword2() {
        String password = "123";
        int i = 0;
        while (i < 3) {
            System.out.println("Enter password");
            String s = userInput();
            if (s.equals(password)){
                return true;
            }
            i++;
        }
        return false;
    }

从你的代码

  while(!(s.equals(password)) && i < 2)

换成这样

  while(i < 2)

这个 if 条件将负责密码验证

 if(s.equals(password))
   return true;
于 2013-10-19T08:08:08.893 回答
0

您的代码的问题是当您输入正确的密码时

!(s.equals(password)) 以某种方式计算为 false (!(true)) 。而且您已经使用了 end 所以第一个条件评估为假,第二个条件为真。并且程序离开了while循环并返回false。

于 2013-10-19T10:29:53.517 回答
0

尝试次数应存储在数据库中。像这样:

用户名 | 密码 | 详情 | password_try_times

一旦用户尝试输入错误密码,password_try_times 应加 1。如果用户登录成功,password_try_times 将设置为 0。

如果您使用 Spring-security,则可以将此过程添加到UserAuthenticationProviderService方法中。

希望这会有所帮助:)

于 2014-08-01T22:05:14.923 回答