2011-02-03 3 views
1

編集 - バージョン 最初の投稿はconfusamaginでした。パスワードプロンプトプログラムを作成します。パスワードに少なくとも1桁と1文字が含まれているかどうかを確認する必要があります。また、パスワードの長さは6〜10でなければなりません。Javaコード文字と数字のパスワードを確認しますか?

私の問題は、数字と文字にパスワードが存在するかどうかを調べることです。パスワードのチェック領域では、どこから始めるべきかわかりません。私は文字と桁が1つあるかどうかを確認する方法がわかりません。私はどちらかを行う方法を知っているか、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

+0

@jzd:タイトルには贈り物がありますが(本文に質問があるはずですが) – spender

+0

@spender、タイトルはヒントですが、いくつかのループとロジックチェックがあります。問題は非常に曖昧です。コード内でいくつかの問題を見つけるのに時間がかかりません。 – jzd

答えて

0

...私がこれまで持っているものです。

  1. 最初の非文字で文字検査が失敗しています。同じことがあなたの桁確認で起こっています。たとえば、すべての文字が非文字の場合にのみ拒否したいとします。論理エラー。

  2. 3つのループがあります。あなたが長さチェックを一度通過すると、それは決して再びチェックされることはないので、悪い考えです。誰かが入力した場合にどうなるか考えてみましょう:12345678。長さはOKですが、手紙はありません。 [OK]を入力します:a1。長さはもう一度チェックされません。 ALL文字が文字/数字がそれぞれある場合

+0

私はまた、すべてを2回することを避けるために...を使用したいと思います。 – lll

1

checkPasswordLettercheckPasswordDigitにのみtrueを返します。これはあなたが意味することですか?ここで

+0

それを指摘してくれてありがとうというわけではありません。私は今、彼らが数字または手紙を持っているかどうかを確認する方法を考え出す必要があります。私の本はそれを行う方法を提供していないので、まだそれにつれていた。 – allencoded

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

の文字が、ない場合は、私は++またはあなたのループは永遠に起こっているために、私は、中に必要な変数をインクリメントしませんでした
+0

良いキャッチ。完全にそれを逃した。 – spender

+0

私があなたのために私が++を追加することでそれをきれいにすることを意味するのを見る。しかし、それ以上の調査では、文字列全体が文字であることをチェックするので、私がしたいことではありません。 – allencoded

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

+1私は擬似コードのアプローチが好きです。 – spender

+0

クールな愛。このビットはすごく助けになりました。実際にcheckPasswordに変更しました。 – allencoded

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; 
    } } 
関連する問題