2012-09-25 127 views
0

以下是在插入我自己的散列表時碰撞檢測方法的內部。我與小的測試號工作,並試圖讓我的邏輯吧,可變的散列設置爲0,table.length爲10Array迭代,跳躍

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; 
      } 

變量最初需要是什麼我目前的前指數一個是(哈希)。我的問題是,如果散列是0,最初需要設置爲9.我認爲這會工作,但我得到-1時散列設置爲0例如。第一個IF語句循環回到第一個索引,例如,如果您從中間開始5或某些內容,第二個索引將用於檢查所有索引並且全部滿了。

+1

所以你的問題是由於'-1%10'在Java中是'-1'?一個骯髒的問題是使用'(table.length + hash - 1)%table.length',但應該有更好的選擇。 – Blender

回答

3

由於您使用%,沒有溢出的風險,所以你可以改變行至

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

來解決這個問題。