2012-03-24 11 views
2

単語のファイルをスキャンし、使用して内蔵のAPIからHashSetのクラス、私のワードカウントは、(することになっているものである)349を返すとき...私のアドオンは、()のロジックが故障しているようだ

私の自家製HashSetのクラスを使用して、私は235を取得...ので、何かが私のアドオンで()メソッドは、間違っている必要がありますが、私はそれが何であるかを理解することはできません。

ありがとうございました!

public class HashWordSet implements WordSet { 

private int size = 0; 
private Node[] buckets = new Node[8]; 

public Iterator<Word> iterator() { 
    return new WordIterator(); 
} 

//Add word if not already added 
public void add(Word word) { 
    int key = getBucketNumber(word); 
    Node node = buckets[key]; 
    while (node != null) { 
     if (node.value.equals(word)) 
      return; 
     else 
      node = node.next; 
    } 
    node = new Node(word); 
    buckets[key] = node; 
    size++; 
    if (size == buckets.length) rehash(); 
} 

private int getBucketNumber(Word word) { 
    int hc = word.hashCode(); 
    if (hc < 0) hc = -hc; 
    return hc % buckets.length; 
} 

答えて

1
node = new Node(word); 
buckets[key] = node; 

すでにバケットにノードがある場合は、それらを投げ捨てただけです。おかげでdigitaljoel

node = new Node(word); 
node.next = buckets[key]; 
buckets[key] = node; 
+0

:ような何かを試してみてください!それはまさにそれでした! – Wangagat

+0

確かなことです。それは素晴らしい気晴らしだった:) – digitaljoel

2

あなたは[のみ] 代わりのリストに新しいノードを追加するので、あなたは、このノードですでにいたすべての古いデータを失う新しい単語とnodes[key]を上書きように思えます。

add()が呼び出された前にそこに要素がない場合は正常に動作する必要がありますが、存在する場合 - あなたは、いくつかのデータが失われます。

node = new Node(word); 
buckets[key] = node; 

Nodeの実際の実装せずに約100%を確認するのは難しいですが。

関連する問題