0

配列で値を検索しようとしていますが、組み込みのバイナリ検索を使用することにしました。私はクラスを持っています:

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 のような他の数値では機能しません。ほとんどの場合、手動でバイナリ検索を実装するだけですが、なぜこれが機能しないのか混乱しています。

4

3 に答える 3

4

二分探索は、すでにソートされている配列に対してのみ機能します。

Arrays.binarySearchjavadocから引用:

二分探索アルゴリズムを使用して、指定された int の配列から指定された値を検索します。この呼び出しを行う前に、配列を (sort(int[]) メソッドで) ソートする必要があります。ソートされていない場合、結果は未定義です。指定された値を持つ複数の要素が配列に含まれている場合、どれが見つかるかは保証されません。

まだソートされていない場合、いくつかの数値が見つかりません。

二分探索を試みる前に並べ替えます。

Arrays.sort(acctNumbers);
于 2013-04-23T20:58:13.597 に答える
2

二分探索には、ソートされた配列が必要です。

あなたは出来る:

于 2013-04-23T20:58:04.813 に答える