2016-10-13 1 views
0
svm_node n=new svm_node(); 
for (String tk:instance.keySet()){ 
      System.out.println(tk + " "+ instance.get(tk)); 
      if(IndexDic.containsKey(tk)){ 

      n.index=(IndexDic.get(tk)); 
      n.value=instance.get(tk); 
      nodes.add(n); 
      } 
     else{ 
      System.out.println("does not contain"+tk); 
     } 
     } 

私は上記のコードを持っています。ノードの値をコンソールに出力したり、デバッガを使ってチェックしたりすると、すべての要素が同じ値になります。つまり、ノードのすべてのnは同じ値を持ちます。帽子を扱うには何ができますか?リストのすべての要素は、同じ要素外の機能を持ちます。

答えて

1

同じsvm_nodeオブジェクトをコレクションに何度も繰り返して追加していました。この問題を解決するには、ループ内にsvm_nodeのインスタンス化を動かす:

for (String tk:instance.keySet()) { 
    svm_node n=new svm_node(); 
    System.out.println(tk + " "+ instance.get(tk)); 

    if (IndexDic.containsKey(tk)) { 
     n.index = (IndexDic.get(tk)); 
     n.value = instance.get(tk); 
     nodes.add(n); 
    } 
    else { 
     System.out.println("does not contain"+tk); 
    } 
} 
+0

ありがとう、私はそれを修正しました! – AshS

+0

しかし(svm_nodeノード:ノード)のため \t {\t \t IF(!ノード= NULL) \t \t { \t \t \t p.x [I] [U] =新しいsvm_node()。 \t \t \t p.x [i] [u] = node; \t \t u = u + 1;} \t} – AshS

0

をあなたは、forループ内でsvm_node n = new svm_node()を呼び出す必要があります。それ以外の場合は、同じノードが上書きされます。

関連する問題