2017-04-02 10 views
0

ArrayListArrayListsArrayList<ArrayList<Element>>)を含むアプリケーションがあります。基本的に、各要素はユーザーが対話できる項目です。要素が対話するたびに、その要素が更新され、コンテナオブジェクト全体がファイルシステムに再格納されます。要素の1つのタイプ(extends要素)は、要素タイトル、真または偽の値、および他のいくつかの一般的なパラメータを含むことができるEBooleanです。 updateBooleanメソッドが呼び出されると、タブ、ID、ブール値が渡されます。このメソッドは、正しい要素(一致するID)をスキャンし、その値を更新します。しかし、私はいくつかの奇妙な動作が発生している、1つの要素を変更すると、配列全体のすべての要素が変更されます。ArrayListの問題:1つの値すべての値をリセットする

はここ/出力ワットコードです:

public void updateBoolean(int index, int ID, boolean b) { 
    // Data that is gonna be saved 
    System.out.println("Statistics: Index: "+index+" Array # "+elements.size()+" Elements in array #: "+elements.get(index).size()); 
    for (int i = 1; i < elements.size(); i++) { 
     System.out.println("TAB " + i + " Title: " + elements.get(i).get(0).getTitle() + "Boolean value: " + ((EBoolean) elements.get(i).get(0)).getValue()); 
    } 

    for (int j = 0; j < elements.get(index).size(); j++) { 
     if (elements.get(index).get(j).getID() == ID) { 
      EBoolean ent = (EBoolean) elements.get(index).get(0); 
      ent.setValue(b); 
      ent.setModified(true); 
      elements.get(index).set(j, ent); 
      System.out.println("Updated booleans, here's what we have now: "); 
      for (int i = 1; i < elements.size(); i++) { 
       System.out.println("TAB " + i + " Title: " + elements.get(i).get(0).getTitle() + "Boolean value: " + ((EBoolean) elements.get(i).get(0)).getValue()); 

      } 
      return; 
     } 
    } 

} 

出力:配列に追加するとき

04-02 16:01:05.441 15442-15442/? I/System.out: Statistics: Index: 4 Array #   13 Elements in array #: 4 
04-02 16:01:05.441 15442-15442/? I/System.out: TAB 1 Title: BooleanBoolean value: true 
04-02 16:01:05.441 15442-15442/? I/System.out: TAB 2 Title: BooleanBoolean value: false 
04-02 16:01:05.441 15442-15442/? I/System.out: TAB 3 Title: BooleanBoolean value: false 
04-02 16:01:05.441 15442-15442/? I/System.out: TAB 4 Title: BooleanBoolean value: false 
04-02 16:01:05.441 15442-15442/? I/System.out: TAB 5 Title: BooleanBoolean value: false 
04-02 16:01:05.441 15442-15442/? I/System.out: TAB 6 Title: BooleanBoolean value: false 
04-02 16:01:05.441 15442-15442/? I/System.out: TAB 7 Title: BooleanBoolean value: false 
04-02 16:01:05.441 15442-15442/? I/System.out: TAB 8 Title: BooleanBoolean value: false 
04-02 16:01:05.441 15442-15442/? I/System.out: TAB 9 Title: BooleanBoolean value: false 
04-02 16:01:05.441 15442-15442/? I/System.out: TAB 10 Title: BooleanBoolean value: false 
04-02 16:01:05.441 15442-15442/? I/System.out: TAB 11 Title: BooleanBoolean value: false 
04-02 16:01:05.441 15442-15442/? I/System.out: TAB 12 Title: BooleanBoolean value: false 
04-02 16:01:05.441 15442-15442/? I/System.out: Updated booleans, here's what we have now: 
04-02 16:01:05.441 15442-15442/? I/System.out: TAB 1 Title: BooleanBoolean value: true 
04-02 16:01:05.441 15442-15442/? I/System.out: TAB 2 Title: BooleanBoolean value: true 
04-02 16:01:05.441 15442-15442/? I/System.out: TAB 3 Title: BooleanBoolean value: true 
04-02 16:01:05.441 15442-15442/? I/System.out: TAB 4 Title: BooleanBoolean value: true 
04-02 16:01:05.441 15442-15442/? I/System.out: TAB 5 Title: BooleanBoolean value: true 
04-02 16:01:05.441 15442-15442/? I/System.out: TAB 6 Title: BooleanBoolean value: true 
04-02 16:01:05.441 15442-15442/? I/System.out: TAB 7 Title: BooleanBoolean value: true 
04-02 16:01:05.441 15442-15442/? I/System.out: TAB 8 Title: BooleanBoolean value: true 
04-02 16:01:05.441 15442-15442/? I/System.out: TAB 9 Title: BooleanBoolean value: true 
04-02 16:01:05.441 15442-15442/? I/System.out: TAB 10 Title: BooleanBoolean value: true 
04-02 16:01:05.441 15442-15442/? I/System.out: TAB 11 Title: BooleanBoolean value: true 
04-02 16:01:05.441 15442-15442/? I/System.out: TAB 12 Title: BooleanBoolean value: true 
+1

'elements.get(index).get(0)'から 'EBoolean'を取得し、' elements.get(index).set(j、ent) 'に格納するのはなぜですか?また、どのように 'EBoolean'を作成していますか?更新するインスタンスごとに新しいインスタンスを作成しないと、実際にはすべてのインスタンスが更新されます。インデックス0を持つ 'EBoolean'は、そこから取り出して変更すると更新されます。これにより、 'EBoolean'の同じインスタンスが' 0'と 'j'の位置にあり、どちらかを変更すると、' EBoolean'の同じインスタンスであるため、どちらか一方を変更することになります。 – Leon

+0

@Leon回答インスタンスに基づいて、最初のタブの最初の出力値と同じではなく、それ以外の場合はfalseです。 –

+0

'elements.get(index).get(0)'と 'elements.get(index).set(j、ent)'はテストのためのものでした。通常は@Leonのコードを1行だけ使用します – wdavies973

答えて

0

新しいインスタンスが作成されていませんでした。 ArrayList<ArrayList<Element>>内のすべてのオブジェクトが独自のインスタンスであることを確認してください。

関連する問題