Java utils二进制搜索未找到所有值

时间:2013-04-23 20:56:59

标签: java binary-search

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

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这样的其他数字。我真的没有最模糊的想法。我很可能只是手工实现二进制搜索,但我很困惑为什么这不起作用。

3 个答案:

答案 0 :(得分:4)

二进制搜索仅适用于is already sorted

的数组

引自Arrays.binarySearch javadoc:

  

使用指针在指定的int数组中搜索指定的值   二分搜索算法。必须对数组进行排序(如   在进行此调用之前,sort(int [])方法)。如果没有排序,   结果未定义。如果数组包含多个元素   如果具有指定的值,则无法保证将使用哪一个   找到。

如果它尚未排序,那么它将找不到一些数字。

在尝试任何二进制搜索之前

Sort it

Arrays.sort(acctNumbers);

答案 1 :(得分:2)

二进制搜索需要排序数组。

你可以:

  • 按排序顺序提供数组
  • 或者使用Arrays.sort()
  • 对其进行排序

答案 2 :(得分:0)

如果Java使用链接,它看起来像

if ( Arrays.sort(acctNumbers).find( number ) ) 

现在你必须做

List l = Arrays.sort(acctNumbers);
// decide on 
Arrays.binarySearch( l, number );