2017-04-19 10 views
0

このプログラムでは、パスワードの入力を求めるプロンプトが表示されていますが、パスワードは8文字以上で、文字と数字のみでなければなりません。ここに私のコードです:パスワードを入力して条件を確認するプログラム

import java.util.Scanner; 

public class Password { 

    public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    Scanner input = new Scanner(System.in); 
    System.out.println("Please enter a password: "); 
    String password = input.nextLine(); 
    boolean valid = true; 

    if (valid(password)) { 
     System.out.println("Password accepted!"); 
    } 
    } 

    public static boolean valid(String password) { 
    if (password.length() < 8) { 
     System.out.println("Password must have at least eight characters."); 
     return false; 
    } else { 
    char c; 
    for (int i = 0; i < password.length(); i++) { 
     c = password.charAt(i); 
     if (password.matches("[0-9a-zA-Z]+")) { 
     return true; 
     } else { 
     System.out.println("Password must only contain letters and digits."); 
     return false; 
     } 
    } 
    return true; 
    } 
    } 
} 

私がいる問題は、私は$$$のような入力を入力したときに、出力のみが「パスワードは8文字以上を持たなければならない」ということですが、私は、この出力の両方を必要としますパスワードには文字と数字のみを含める必要があります。つまり、両方の条件が偽であるかどうかをチェックして両方の出力を表示するプログラムが必要です。私のプログラムをより良くする方法の提案、それも役に立つでしょう。

ありがとう!

+0

'else'ステートメントで入力の長さをチェックする条件を追加します。 – Mena

+0

@メナ私はそれを試してみるよ、ありがとう! –

答えて

1

有効な変数をmainメソッドから有効なメソッドに移動し、条件が満たされない場合はfalseに設定するだけです。すべての条件が確認されたら、最後に戻ってください。

public static boolean checkValid(String password) { 
    boolean valid = true; 

    if (password.length() < 8) { 
     System.out.println("Password must have at least eight characters."); 
     valid = false; 
    } 
    if(!password.matches("[0-9a-zA-Z]+")) { 
     System.out.println("Password must only contain letters and digits."); 
     valid = false; 
    } 

    return valid; 
} 

正規表現と一致するためにパスワードのすべての文字を繰り返し処理する必要はありません。

+0

私はそれをしますが、私の割り当ての一部は真にブール変数を設定することです。 –

+0

ブール変数はまだtrueに設定されていますが、実際にはそれを使用します。何もしていないので、あなたが持っている場所に有効な変数を持つ理由はありません。 – ElectronicManuel

+0

うーん、私はあなたが意味するものを得る。本当にありがとう! –

関連する問題