2

パスワード検証の2つの方法に問題があります。メソッドhasDigitsAndLettersは、文字列のすべての文字が数字と文字であるかどうかをチェックすることになっています。2番目のメソッドhasTwoDigitsは、パスに少なくとも2桁あるかどうかをチェックすることになっていますが、問題は、期待される結果に対して、それらが回転していることです。 false。誰かが助けることができれば。これがコードです。

//check if the whole string consists of digits and letters
    public static boolean hasDigitsAndLetters(String pass)
    {
        for(int i=0; i<pass.length(); i++)
        {
            if(!Character.isLetterOrDigit((i)))
            {
                return false;
            }

        }
        return true;
    }



    // check whether the password has at least 2 digits
    public static boolean hasTwoDigits(String pass)
    {
        int counter = 0;
        for(int i=0; i<pass.length(); i++)
        {
            if(Character.isDigit(i))
            {
                counter ++;
            }

        }
        System.out.println("Number of digits: " + counter);
        if(counter >= 2)
        {
            return true;
        }
        return false;
    }
4

5 に答える 5

6

その文字列の位置に文字を渡す必要がありますi

Character.isLetterOrDigit((pass.charAt(i)))

数字も同じ

Character.isDigit((pass.charAt(i)))
于 2012-07-31T18:38:26.887 に答える
2

iインデックス変数自体ではなく、インデックスで文字列内の文字をチェックする必要があります。

Character.isLetterOrDigit(pass.charAt(i))
于 2012-07-31T18:39:22.150 に答える
2

の文字をチェックしていないのでpass、チェックを次のように変更する必要があります。

if(!Character.isLetterOrDigit((pass.charAt(i)))

if(Character.isDigit(pass.charAt(i)))
于 2012-07-31T18:39:30.733 に答える
2

現在、iが数字か文字か、iがintかを確認しています。位置iの文字を確認する必要があります。

if(Character.isDigit(pass.charAt(i)))
于 2012-07-31T18:40:22.527 に答える
1

エラーは、文字列内のその位置にある文字ではなく、文字列内の位置を比較していることです。私はおそらく使用しないでしょうcharAt、しかし...ここでポジションの明示的な管理を維持することに意味はありません。代わりにString.toCharArrayを使用することをお勧めします。

public static boolean isAlphanumeric(final String str) {
  for (char c : str.toCharArray()) {
    if (!Character.isLetterOrDigit(c)) {
      return false;
    }
  }
  return true;
}

public static boolean isBidigital(final String str) {
  int n = 0;
  for (char c : str.toCharArray()) {
    if (Character.isDigit(c)) {
      ++n;
    }
  }
  return n >= 2;
}
于 2012-07-31T18:53:28.807 に答える