2017-12-06 6 views
0

配列に単語を格納するプログラムを作成しようとしています。私はInteger値を計算するhashFunctionを持っています。この値は、配列内のその位置がnullの場合、ノードにWordを配置するために使用されます。既にそこにCellがある場合、データ型として単語を含む新しいCellを作成する必要があります。そして、それは他のすべてのデータを持つ古いCellを指すはずです。しかし、これは動作していないようです - 私はいくつかの単語を追加していますが、それはセルに最初の単語を追加しますが、他の単語は追加されません。私はなぜこれが起こっているのか分からない - 誰かが私の理由を示すことができますか?配列内のリンクされたリストが機能しない

あなたは次のことを行う必要があります
public class test2{ 

    public static class Node<T>{ 
     public T data; 
     public Node<T> next; 

    public Node(T data, Node<T> next) 
    { 
     this.data = data; 
     this.next = next; 
    } 
} 



    static Node[] array = new Node[10]; 

    public static void add(String word){ 
     int position = hashFunction(word); 
     if(array[position] == null){ 
      array[position] = new Node(word, null); 
     }else{ 
      new Node(word, array[position]); 
     } 
    } 

    public static int hashFunction(String a){ 
     int sum = 1; 
     for(int i = 0; i<a.length(); i++){ 
      char b = a.charAt(i); 
      int value = (int) b; 
      sum *= value; 
     } 
    return sum % array.length; 
} 

public static void main(String[] args) { 
    add("abc"); 
    add("acb"); 
    add("bca"); 
    add("bac"); 
    add("cba"); 
    System.out.println(array[4].next); 
} 
} 
+3

} else { 新しいノード(単語、配列[位置]); } この新しいノードはどこにも格納されていません –

+0

配列[位置]がnullでない場合、新しいノードはどこに挿入されるべきですか? –

答えて

2

リンクされたリストに新しいノードとして単語を追加していますが、新しいノードへの参照を保存することはありません。リンクされたリストの先頭にノードを追加するときは、新しいノードをリストの新しいヘッドとして格納する必要があります。あなたのケースでは

、次でそれを達成できます。

public static void add(String word){ 
    int position = hashFunction(word); 
    if(array[position] == null){ 
     array[position] = new Node(word, null); 
    }else{ 
     Node newHead = new Node(word, array[position]); 
     array[position] = newHead; 
    } 
} 

今、あなたのリンクリストは、あなたが期待しているすべての単語を持っています。 array[position]のリンクされたリストを繰り返し処理し、新しいノードをリストの最後に追加して、ユースケースに適したものにすることもできます。

+1

ありがとうございます - 今すぐ素晴らしい作品! – bancqm

+1

うれしい私は助けることができます。ハッピーコーディング! –

3

代わりの

new Node(word, array[position]) 

array[position] = new Node(word, array[position]); 

コードの元の行は、あなたが正しくあなたが現在の割り当て先のNodeの新しいインスタンスを作成しているとarray[position]nextという値に設定します。

ただし、array[position]は同じですが、Nodeの新しく作成されたインスタンスに変更する必要があります。

+0

ありがとうございます - 私はここに掲載された他のコードを使用していますが、あなたの1つもうまくいきます。 – bancqm

関連する問題