0

編集:これはおそらくPasswordVerifier.Javaの非常に悪いコードです

入力されたパスワードの長さが 6 文字以上で、大文字、小文字、数字が含まれているかどうかを確認するパスワード検証ツールを実行しています。

ロジスティクスはある程度正しいと思いますが、何らかの理由でプログラムが次のプロンプトに進みません。パスワードの入力を求められた後、電話を切り、パスワードが有効かどうかを教えてくれません。for ループは正しいと思っているので、何が問題なのかわかりません。

PasswordVerifier.Java

import java.util.*;

public class PasswordVerifier{

    //field
    private static int MIN_PASSWORD_LENGTH = 6;

    //methods
    public static boolean isValid(String str){

        boolean valid = false;

        PasswordVerifier pass = new PasswordVerifier();

        if(pass.hasUpperCase(str)|| pass.hasLowerCase(str) || pass.hasDigit(str)){
            valid = true;
        }

        if (str.length() < 6){
            valid = false;
        }

        return valid;

    }

    //UpperCase Boolean check
    private boolean hasUpperCase(String str){

        boolean valid = false;

        int i = 0;

        while (i < str.length()){
            if (Character.isUpperCase(str.charAt(i)))
            valid = true;
        }   
        i++;

        return valid;
    }

    //Lowercase Boolean Check
    private boolean hasLowerCase(String str){

        boolean valid = false;

        int i = 0;

        while (i < str.length()){
            if (Character.isLowerCase(str.charAt(i)))
            valid = true;
        }   
        i++;

        return valid;
    }

    //Number boolean check
    private boolean hasDigit(String str){

        boolean valid = false;

        int i = 0;

        while (i < str.length()){
            if ((Character.isDigit(str.charAt(i))))
            valid = true;
        }   
        i++;

        return valid;

    }   

}

PasswordDemo.Java

import javax.swing.JOptionPane;

public class PasswordDemo{

    public static void main(String[] args){

        String input; //To hold the user's input

        input = JOptionPane.showInputDialog("Enter a Password");

            if (PasswordVerifier.isValid(input)){
                JOptionPane.showMessageDialog(null, "Valid Password");
            }
            else{
                JOptionPane.showMessageDialog(null, "invalid Password, try again.");
            }           

    }
}
4

3 に答える 3

5

ループの終わりを過ぎたところに配置したため、whileループはインクリメントされません。その結果、無限ループとあなたが説明する「ハング」が発生します。ii++

例: 置換

while (i < str.length()){
    if (Character.isUpperCase(str.charAt(i)))
    {
        valid = true;
        // Added break because we found an uppercase letter already.
        break;
    }
    i++;  // Inside the while loop.
}

while各ループに同様の変更を加える必要があります。

さらに、3 つの規定すべてを適用する場合は、logical-OR 演算子||を使用せず、logical-and を使用します&&

if (pass.hasUpperCase(str) && pass.hasLowerCase(str) && pass.hasDigit(str)) {
    valid = true;
}

これにより、パスワードに大文字小文字が含まれ、数字が含まれていることが確認されます。

于 2013-07-02T22:37:28.447 に答える
0

あなたの問題は、while ループの外で i++ をカウントしていることだと思います。次のように while に入れます。

private boolean hasUpperCase(String str){

    boolean valid = false;

    int i = 0;

    while (i < str.length()){
        if (Character.isUpperCase(str.charAt(i)))
        valid = true;
        i++;
    }   

    return valid;
}

これは、取得したすべての while ループの問題です。

于 2013-07-02T22:39:16.583 に答える