2012-09-25 4 views
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; 
      } 

입니다 하나는 (해시)입니다. 내 문제는 해시 0, 초기 9로 설정해야합니다. 나는이 작동하는 줄 알았는데 해시 0으로 예를 들어 설정할 때 -1 있어요. 첫 번째 IF 문은 예를 들어 5 또는 중간에 시작한 경우 첫 번째 인덱스로 되돌아 가고, 두 번째 인덱스는 모든 인덱스를 모두 확인한 후 모두 채워진 경우를위한 것입니다. 당신이 %을 사용하기 때문에

+1

그래서 문제는'-1 % 10'이 Java에서'-1'입니까? 더티 픽스는'(table.length + hash - 1) % table.length'을 사용하는 것이지만 더 좋은 대안이 있어야합니다. – Blender

답변

3

는 오버 플로우의 위험이 없기 때문에, 당신은이 문제를 해결하기 위해

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

에 선을 변경할 수 있습니다.