2011-12-15 17 views
-1

返される値は、私がarraylistに最後に追加したものと思われます。ArrayListはすべてのインデックスに対して同じ要素を返します

私は(奇妙なことは、私はmのために返される値の印刷をやってるされ、期待どおりにある

public List<M> compute() throws CloneNotSupportedException{ 
    G chil = (G) this.clone(); 
    List<Move> Pm = new ArrayList<M>(); 
      Point p; 

     for(/*condition*/){ 
       //p is defined up here.basically loops through all possible values of p. 
      M m = pud.genM(chil, p); 
      Pm.add(m); 
     } 
     return Pmoves; 
} 

...次の関数が実行されますクラスGameを持っています違う)が作成されているリストをループすると、各要素は最後に追加された要素と等しくなります。この最後に追加された要素が前のすべての子をオーバーライドしているようです...

変数pudUserです。呼び出される関数は、他の条件であれば、いくつかのループのための追加があります、私は公平なビットを、このクラスをダウン簡略化されてきた

public M genM(GameState g, boardPoint p){ 
    M m; // a move 
    for(/*condition*/){ 
     m = new M(/*parameters*/); 
     return m; 
    } 
    return null; 
} 

...ですが、彼らは一種のだから、私はこの例からそれらを取りました不気味で、おそらく無関係です。

オブジェクトM

public M(String type, Point fPos, Point tPos, String input, G g){ 
    this.type = type; 
    this.toPos = toPos; 
    this.fromPos = fromPos; 
    this.uInput = uInput; 
    result = new G(g); 
      //value of G gets edited here. 
} 
+1

問題を再現する自己完結型プログラムを作成できますか?問題を示す単純なプログラムを作成し、問題を表示できなくなるまで単純化します。 –

+0

サンプルコードで 'genM'を呼び出していますが、' genMenMoves'を表示しています - それらは同じメソッドであることを意図していますか? (あなたの名前があなたの実際のコードではっきりしていることを本当に願っています...) –

+0

これは私が長い間見た中で最も謎めいたクラスとメソッドの名前です! – Paul

答えて

1

...のように定義されるスニペットは、非コンパイルおよび名前はかなり不可解されているので、それは、コード内で何が起こっているかを理解することは非常に難しいですが、私は持っています外出先では...あなたは以下のforループに持って

return声明は非常に疑わしいです:

public M genM(GameState g, boardPoint p){ 
    M m; // a move 
    for(/*condition*/){ 
     m = new M(/*parameters*/); 
     return m; 
    } 
    return null; 
} 

それはだ場合実際にはforループから無条件でreturnがループすると、ループはたかだか1回だけ実行されます。

これは赤いニシンかもしれませんが、私たちに示したコードに基づいて確かめるのは難しいです。

+0

それも私の推測だろう。新しい要素を返すのではなく、同じ要素を何度も何度も何度も何度も返すということです。 –

0

あなたが本当に一致していないいくつかの関連するコードと名前の種類を削除したが、私はあなたが

おそらくPまたはGのいずれかとして呼び出すオブジェクトといくつかの問題があると思う:

あなたがクローニングされているGオブジェクトをかつてはforループで同じGオブジェクトを操作していたため、リスト内のすべての値に影響を与えました。

基本的に、Gの値をいくつか変更して、それを複数回リストに追加しています。最後に、すべてのオブジェクトは、同じGオブジェクトで作業しているものと同じです。

関連する問題