0

arrayとarray.BinarySearch関数を使用してパスワードとユーザー名を検証しようとしています。配列の最初の2つのユーザー名:bradleyとjohnは、関数0と1を使用して正しい位置を返しています。ただし、配列jimとclarkeの最後の2つの文字列を検証しようとすると、binarySearch関数は次の場所にあるユーザー名を返します。両方の時間で配列の-2の位置にあるため、検証が失敗します。何か案は?

 String[] names = {"bradley","john","jim","clarke"};
    String[] passwords = {"password","password","test","test"};
    int pos = Arrays.binarySearch(names, uname);
                    System.out.println("Found you in array:" + uname + "here:" + pos);
                    if(pos >= 0)
                    {   
                        System.out.println("Validation password for:" + uname);
                        if(passwords[pos].equals(pword) && !loggedOn[pos])
                        {
    }
4

2 に答える 2

7

names配列はソートされていません:

String[] names = {"bradley","john","jim","clarke"};

これはの要件ですbinarySearch()(そして一般的に二分探索アルゴリズム):

範囲は昇順で並べ替える必要があります

最初に並べ替えると、チャームのように機能します。

String[] names = {"bradley","clarke","jim","john"};
于 2012-12-05T21:04:50.113 に答える
2

二分探索では、事前に配列をソートする必要があります。名前を順番にリストするか、自分で並べ替えを実行できます。Arrays.sort(names)名前の配列を並べ替えるために使用できます。

于 2012-12-05T21:06:32.520 に答える