0

我正在尝试使用数组和 array.BinarySearch 函数验证密码和用户名。数组中的前两个用户名:bradley 和 john 使用函数 0 和 1 返回正确的位置。但是,当我尝试验证数组 jim 和 clarke 中的最后两个字符串时,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 回答