2017-05-25 150 views
-2

我想檢查一個密碼是否至少有8個字符,只包含數字和字母。 這裏的問題是,即使我輸入了一個有效的密碼,它總是說'無效'。這是代碼。謝謝。驗證密碼

public static void main(String[] args) 
{ 
    String pw; 
    Scanner sc = new Scanner(System.in); 

    System.out.print("Enter a password: "); 
    pw = sc.next(); 

    if(isValid(pw)==true) 
    { 
     System.out.println("Valid Password"); 
    } 
    else 
    { 
     System.out.println("Invalid Password"); 
    } 

} 

public static boolean isValid(String pw) 
{ 
    if(pw.length()<8) 
    { 
     return false; 
    } 
    else 
    { 
     for(int x=0; x<pw.length(); x++) 
     { 

      return Character.isLetterOrDigit(pw.charAt(x)); 

     } 
    } 
    return true; 
} 

}

+0

你調試了嗎?如果你輸入密碼,那麼'pw'是什麼,代碼實際返回的地方是什麼等等。 – luk2302

+0

你意識到你的循環在檢查'isLetterOrDigit'在第一次檢查時返回,對嗎? – KevinO

+0

您的循環邏輯完全關閉。請調試你的代碼,看看它有什麼瘋狂的無用回報。或者甚至更好:寫一些測試,看看哪些失敗。 – luk2302

回答

2

你在循環的第一次迭代中返回結果,而你應該做一個標誌變量,並在循環結束返回的結果,或者你可以反轉if條件並返回false如果該值爲true並且如果它沒有返回true在循環結束時。

public static boolean isValid(String password){ 
    if(password.length() < 8) 
     return false; 

    for(int x = 0; x < password.length(); x++) 
     if(!Character.isLetterOrDigit(password.charAt(x))) 
      return false; 

    return true; 
} 
3

您的代碼的邏輯除isValid方法中'for'循環中的return語句外正確。下面是編輯的代碼:

public static void main(String[] args) 
{ 
    String pw; 
    Scanner sc = new Scanner(System.in); 

    System.out.print("Enter a password: "); 
    pw = sc.next(); 

    if(isValid(pw)) 
    { 
     System.out.println("Valid Password"); 
    } 
    else 
    { 
     System.out.println("Invalid Password"); 
    } 

} 

public static boolean isValid(String pw) 
{ 
    if(pw.length()<8) 
    { 
     return false; 
    } 
    else 
    { 
     for(int x=0; x<pw.length(); x++) 
     { 
      if(!Character.isLetterOrDigit(pw.charAt(x))) 
       return false; 
     } 
    } 
    return true; 
} 

注意,如果你的密碼是有效的,但可以打印「有效」的一些無效的密碼,如@@@@@@@@

你的代碼不打印「無效」