2016-09-10 9 views
-5

このコードで何が問題なのか分かりません。しかし、私は出力としてすべての望ましい値を得ていません。このコードで私を助けてください。リニアプロービング。このプログラムで何が問題になっていますか?

public class LinearProbing{ 
    public static void main(String[] args) { 
     int[] arr = new int[13]; 
     int[] inputs = {18,41,22,44,59,32,31,73}; 
     int element = inputs[0] % 13; 
     for (int i = 0, j = 0; i < 13;i++) { 
      if(arr[element] != 0){ 
       element++; 
       continue; 
      } 
      arr[element] = inputs[j++]; 
      element = inputs[j]%13; 
     } 
     for (int i = 0; i < 13; i++) { 
      System.out.print(arr[i]+" "); 
     } 
    } 
} 

私が欲しいの出力は次のようになります。

0 0 41 0 0 18 44 59 32 22 31 73 0 

と私は取得しています出力は次のようになります。

0 0 41 0 0 18 44 59 32 22 0 0 0 
+1

:あなたはarr配列のオーバーフローのために余分なガード条件を追加し、これにコードをリファクタリングすることができますので、if (...) { ...; continue; }文は、本当にwhile (...) { ... }ループのですか?何が間違っているのですか? – Tunaki

+1

現在の成果は何ですか?達成したいことは何ですか? –

+0

私は、ハッシュテーブルを実装し、衝突解決テクニックを適用しています。出力を表示するために質問を編集しました。 –

答えて

0

実際にデバッグコードを使用すると、ループが途中で終了することがわかります。これは13回の反復で終了しないためです。実際には、あなたのコードはループ状態をどのように変更しても、あなたが要求した出力を書くことはできません。 73が含まれているためにあなたの結果は、この文を実行しなければならないためには

inputsj参照最後の要素は:jは、最後の要素、非常に次の行を参照する場合

arr[element] = inputs[j++]; 

しかし、意志だから、

element = inputs[j]%13; 

、レモ:jは今inputsの長さを超えているためは、失敗しますjinputsの長さを超えたときにループ条件VEの、すなわちiを削除し、その後破る:

int[] arr = new int[13]; 
int[] inputs = { 18, 41, 22, 44, 59, 32, 31, 73 }; 
int element = inputs[0] % 13; 
for (int j = 0; ;) { 
    if (arr[element] != 0) { 
     element++; 
     continue; 
    } 
    arr[element] = inputs[j++]; 
    if (j == inputs.length) 
     break; 
    element = inputs[j] % 13; 
} 
for (int i = 0; i < 13; i++) { 
    System.out.print(arr[i] + " "); 
} 

それとも、いっそ、今あなたが唯一の初期化とダムforループは、あなたがいることを実感だろうと見ているあなたあなたはコードが何をしたいかどう

int[] arr = new int[13]; 
int[] inputs = { 18, 41, 22, 44, 59, 32, 31, 73 }; 
OUTER: for (int i = 0; i < inputs.length; i++) { 
    int element = inputs[i] % 13; 
    while (arr[element] != 0) 
     if (++element == arr.length) 
      break OUTER; 
    arr[element] = inputs[i]; 
} 
for (int i = 0; i < 13; i++) 
    System.out.print(arr[i] + " "); 
0

ヒント1:ループのためのあなたの最初のを確認してください。何らかの形で条件の長さがinputsでなければならないのですか?

ヒント2:実行中element++;は範囲外インデックスにつながる可能性があります。

ヒント3:14個の要素を挿入しようとするとどうなりますか?

関連する問題