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弥补投票否决正确答案的投票者,并建议仅提供已排序的数组。