0

以下は、自分のハッシュテーブルに挿入する際の衝突検出メソッドの内部です。私は小さなテスト番号で作業していて、ロジックを正しくしようとしています。変数ハッシュは0に設定され、table.lengthは10です。

 else
    {
                    //problem here   
        int initial=(hash-1)%table.length;


   while (table[hash]!=null)
        {
            hash+=1;
            System.out.println(initial);

            if (hash==table.length)
            {
                hash=0;
            }

            if (hash==initial)
            {
                System.out.println("FULL!");
                break;
            }

変数initialは、現在の変数(ハッシュ)の前にインデックスである必要があります。私の問題は、ハッシュが0の場合、初期値を9に設定する必要があることです。これでうまくいくと思いましたが、たとえばハッシュを0に設定すると-1になります。最初のIFステートメントは、たとえば5かそこらの途中から開始した場合、最初のインデックスにループバックします。2番目のステートメントは、すべてのインデックスをチェックし、それらがすべていっぱいになった場合に使用します。

4

1 に答える 1

3

を使用%しているため、オーバーフローのリスクがないため、行を次のように変更するだけです。

int initial = (hash - 1 + table.length) % table.length;

この問題を回避するために。

于 2012-09-25T20:48:10.177 に答える