Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java utils二进制搜索未找到所有值_Java_Binary Search - Fatal编程技术网

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

Java utils二进制搜索未找到所有值,java,binary-search,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

我试图在数组中搜索一个值,并决定使用内置的二进制搜索。我有一门课:

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。我真的一点也不知道为什么。我很可能只是手工实现二进制搜索,但我不明白为什么这不起作用

二进制搜索需要排序数组

你可以:

  • 按排序顺序提供数组
  • 或者用

二进制搜索需要排序数组

你可以:

  • 按排序顺序提供数组
  • 或者用

二进制搜索仅适用于以下数组:

引用自
Arrays.binarySearch
javadoc:

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

如果它还没有排序,那么它将找不到一些数字

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

Arrays.sort(acctNumbers);

二进制搜索仅适用于以下数组:

引用自
Arrays.binarySearch
javadoc:

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

如果它还没有排序,那么它将找不到一些数字

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

Arrays.sort(acctNumbers);

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

if ( Arrays.sort(acctNumbers).find( number ) ) 
现在你要做什么

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

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

if ( Arrays.sort(acctNumbers).find( number ) ) 
现在你要做什么

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

在提问之前,您确实应该阅读至少部分文档进行二进制搜索。明确声明:必须对数组进行排序。如果JDK的某些部分行为不端,在发布问题之前先阅读它的文档。在提出问题之前,您确实应该至少阅读部分文档进行二进制搜索。明确声明:必须对数组进行排序。如果JDK的某些部分行为不端,请在发布问题之前阅读其文档。+1代表比我更完整的答案,并弥补投票否决正确答案的恶棍。+1代表比我更完整的答案,以及弥补投票否决正确答案的投票者。+1弥补投票否决正确答案的投票者,并建议仅提供已排序的数组。+1弥补投票否决正确答案的投票者,并建议仅提供已排序的数组。