2013-10-19 110 views
3

我有一個真正的新手問題。 我想要求用戶輸入密碼3次。 3次後,如果仍然輸入了錯誤的密碼,我想退出該塊。Java要求用戶輸入密碼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!"); 

這是我的編輯後的版本:

回答

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(s.equals(password)) 
    return true; 
+0

讓我說我得到的密碼後第二次去。它退出while循環和IF語句。最後的'返回錯誤'超過正確的返回是真的嗎? – user2343837

+0

'return true'將是最後執行的語句,而不是'return false'。 – 2013-10-19 08:22:35

+0

爲什麼不用'for'循環替換'while'循環? – Vallentin

0

問題當你進入時正確的密碼

!(s.equals(password))以某種方式(!(true))計算爲false。而且你已經用完了,所以第一個條件的計算結果爲假,第二個爲真。程序離開while循環並返回false。

0

嘗試的次數應該存儲在數據庫中。 是這樣的:

用戶名|密碼|詳情| password_try_times

一旦用戶嘗試了錯誤的密碼,password_try_times應該加1 如果用戶成功登錄,則password_try_times會如果你使用Spring的安全設置爲0。

,您可以添加此過程到UserAuthenticationProviderService方法。

希望這會有所幫助:)

相關問題