This question already has answers here:
java Arrays.binarySearch fails to find target
                                
                                    (3个答案)
                                
                        
                        
                            search in a binary tree
                                
                                    (2个答案)
                                
                        
                6年前关闭。
            
        

我试图在数组中搜索一个值,并决定使用内置的二进制搜索来执行此操作。我有一堂课:

import java.util.*;
public class Charge {
private int isAcct;
private int[] acctNumbers = {5658845,4520125,7895122,8777541,8451277,
1302850,8080152,4562555,5552012,5050552,7824577,
                    1250255,1005231,6545231,3852085,7576651,7881200,
                    4851002};


public Charge(int aNum) {
    isAcct = aNum;
}
public Boolean isValidAcctNumber() {
    int m = Arrays.binarySearch(acctNumbers, isAcct);
    if (m == -1)
        return false;
    else
        return true;
}
}


并进行测试:

import java.util.Scanner;
public class ChargeTest {
public static void main(String[] args){
    Scanner scan = new Scanner(System.in);
    System.out.println("What is your account number?: ");
    int num = scan.nextInt();
    Charge charge = new Charge(num);
    System.out.println(charge.isValidAcctNumber());

    if (charge.isValidAcctNumber() == false) {
        System.out.println("Your account "+num+" is not a valid account");
    } else  {
        System.out.println("Your account "+num+" is a valid account");
    }
}


}

这适用于某些数字,例如4851002,但不适用于某些数字,例如1302850。我真的不知道为什么。我很可能只是手动实现二进制搜索,但是我对为什么这种方法不起作用感到困惑。

最佳答案

二进制搜索仅适用于is already sorted的数组。

引用自Arrays.binarySearch javadoc:


  使用以下命令在指定的int数组中搜索指定的值
  二进制搜索算法。数组必须排序(如
  在进行此调用之前,请先执行sort(int [])方法)。如果没有排序,
  结果是不确定的。如果数组包含多个元素
  具有指定的值,则不能保证将是哪个
  找到了。


如果尚未排序,则不会找到一些数字。

Sort it尝试任何二进制搜索之前:

Arrays.sort(acctNumbers);

10-05 22:56
查看更多