2011-02-03 182 views
1

編輯 - 版本 第一篇文章是confusamagin。我的任務是創建一個密碼提示程序。需要檢查密碼是否有至少一個數字和一個字母。此外,密碼長度必須介於6 - 10之間。Java代碼檢查密碼的字母和數字?

我的問題是想弄清楚如何查看數字和字母是否存在密碼。在檢查密碼區域,我不知道從哪裏開始。我不確定如何查看它是否包含Letter和Digit。我知道怎麼做或者通過使用for語句來計數和檢查,但是它所做的只是檢查而不是看它是否包含所有字母或全部數字。

下面是我迄今爲止...

import java.util.Scanner; 

class Password { 

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

//------ENTER A USERNAME 
     System.out.println("Welcome please enter your username and password."); 
     System.out.print("Username >>"); 
     input.nextLine(); 


//------PASSWORD AUTHENTICATION BEGIN  
     String password = enterPassword(); 
      while (!checkPassword(password)) { 
      System.out.println("Password must be 6 - 10 characters long!"); 
      password = enterPassword(); 
      } 

//------PASSWORD VERIFY 
     String passwordverify = enterPassword(); 
     while (!password.equals(passwordverify)){ 
      System.out.println("ERROR - Passwords DO NOT MATCH Re-Enter Passwords Again"); 
      password = enterPassword(); 

     } 

//------ACCEPT PASSWORD  
     System.out.println("Username and Password Accepted!"); 

     } 


//--ENTER PASSWORD STATEMENT 
    public static String enterPassword(){ 
     String password; 
     Scanner input = new Scanner(System.in); 
     System.out.print("Password >>"); 
     password = input.nextLine(); 
     return password; 
     } 

//--BOOLEAN CHECK PW  
    public static boolean checkPassword(String password){ 
     int length; 
     length = password.length(); 
      if (length < 6 || length > 11){ 
      return false; 
      } 
        for (int i = 0; i < password.length();i++){ 
     if (!Character.isLetter(password.charAt(i))) 
     return false; 
      }   
      return true; 
     } 

} 
+0

什麼是你的問題? – jzd 2011-02-03 21:54:19

+0

@jzd:標題的贈品(雖然我同意在某個地方應該有一個問題) – spender 2011-02-03 21:57:10

+0

@spender,標題給出了提示,但是有幾個循環和邏輯檢查。這個問題非常模糊。代碼中找到幾個問題並不需要很長時間。 – jzd 2011-02-03 21:59:59

回答

0

有兩件事情是錯誤的。

  1. 您的信件檢查在第一封非信件上失敗。您的數字檢查發生同樣的事情。例如,如果每個字符都是非字母,則只需要拒絕。所以邏輯錯誤。

  2. 你有三個循環。糟糕的想法,因爲如果你通過長度檢查一次,它永遠不會再被檢查。考慮一下如果有人輸入了會發生什麼:12345678.長度ok,但沒有字母。好的,現在輸入:a1。長度不再檢查。

+0

以上我也會使用do ...來避免做兩件事。 – lll 2011-02-03 22:19:44

1

checkPasswordLettercheckPasswordDigit如果所有字符分別爲字母/數字只會返回true。這是你的意思嗎?

5
public static boolean checkPasswordLetter(String password){ 
      for (int i = 0; i < password.length();){ 
      if (!Character.isLetter(password.charAt(i))){ 
       return false; 
       } 
      } 
     return true; 
     } 

這裏,如果不信,同樣在checkPasswordDigit

你沒有增加變量i,需要在我++或你的循環會永遠
1

第一關......這並不是說Java是不循環或檢查布爾值。 Java正在做你正在做的事情。

現在,你想要做的是什麼不同於你做。

你需要做的是一樣的東西:

public static void main(String[] args) { 
    // ... 
    String password = enterPassword(); 
     while (!isPasswordValid(password)) {    
     password = enterPassword(); 
    } 
    System.out.println("Username and Password Accepted!"); 
} 

public static boolean isPasswordValid(String password) { 
    // return true if and only if password: 
    // 1. has 6-10 characters 
    // 2. contains at least one digit 
    // 3. contains at least one character 
    // print messages accordingly 
} 
0
import java.util.Scanner; 

import java.util.*; 
import java.lang.String; 
import java.lang.Character; 

public class CheckingPassword 
{ 
    public static void main(String[] args) 
     { 
     Scanner input = new Scanner(System.in); 
     System.out.print("Please enter a Password: "); 
     String password = input.next(); 
     if (isValid(password)) { 
      System.out.println("Valid Password"); 
     } else { 
      System.out.println("Invalid Password"); 
     } 
    } 
    public static boolean isValid(String password) { 
     if (password.length() < 9) { 
      return false; 
     } 

else { 
     char c = 0 ; 
       int count=0; 
       System.out.println(password.length()); 
     for (int i = 0;i<=password.length()-1; i++) 
       { 
c = password.charAt(i); 
System.out.println(c); 
if (!Character.isLetterOrDigit(c)) 
{  
return false;   
} 
else if (Character.isDigit(c)) 
{ 
count++;  
if(count==3) 
{ 
return false; 
} 
} 
} 
       return true; 
} 
       } 

       } 
0
import java.util.Scanner; 
public class password{ 
public static void main(String[] args) { 
    // Create a Scanner 
    Scanner input = new Scanner(System.in); 

    // Prompt the user to enter a string 
System.out.print("Enter a password ") ; 
    String s = input.nextLine(); 


if(isValid(s)) 
System.out.println(s + " is a valid password"); 
else 
System.out.println(s + " is not a valid password"); 
} 

public static boolean isValid(String s) 
{ 

    int i = 0,j=0; 


if(s.length()>=8) 
    { 
    for(i=0;i<s.length();i++) 
    { 
    //if(Charcter.isLetter(s.charAt(i))||Digit.isLetter(s.charAt(i))) 
    if (Character.isLetterOrDigit(s.charAt(i))) 
{ 
    if(Character.isDigit(s.charAt(i))) 
    j++; 
} 
    } 
    } 
    else 
    return false; 
    if(j>=2) 
    return true; 
     return false; 
    } }