2015-09-03 48 views
2

我想開發一種方法,它接收ArrayList的列表並根據對象值對列表中的數組列表進行分類。然後,包含這些對象的返回數組列表在其FirstChoice中有1個。在java列表中列出數組列表中的值

在我的代碼的數據結構是

列表具有的ArrayList n個,該ArrayList有24個對象。每個對象都有3個元素,而FirstChoice就是其中的一個元素。

我的代碼的問題是輸出不如我所期望的,它似乎只是堅持一個值,並重復它的整個列表。你可以請幫我解決這個問題

ArrayList<HH> TestMethods(List<ArrayList<HH>> s) { 
     ArrayList<HH> scenario = new ArrayList<HH>(); 
     for (ArrayList<HH> d : s) { 
      for (int i = 0; i < d.size(); i++) { 
       if (s.get(i).get(i).FirstChoice == 1) { 

        scenario.add(s.get(i).get(i)); 
       } 
      } 
     } 

     return scenario; 

    } 
+5

's.get(ⅰ)通過''D'替換。你也可以爲'd'值做另一個foreach循環。 – Tunaki

回答

1

你的錯誤是在這些線路if (s.get(i).get(i).FirstChoice == 1) {scenario.add(s.get(i).get(i));你是不是真正的用戶內部列表d。 你引用的si'th列表的i'th元素,當我想你想的di'th元素,其中ds列表。

ArrayList<HH> TestMethods(List<ArrayList<HH>> s) { 
    ArrayList<HH> scenario = new ArrayList<HH>(); 
    for (ArrayList<HH> d : s) { 
     for (int i = 0; i < d.size(); i++) { 

      int item = d.get(i).FirstChoice; 

      if (item == 1) { 

       scenario.add(item); 
      } 
     } 
    } 

    return scenario; 

} 
+1

這不會編譯:'d.get(i).FirstChoice'可能是給定OP代碼的一個整數,而不是'HH'。 – Tunaki

+1

你說得對,我已經更新了我的答案以反映這一點,並且添加了更詳盡的解釋。 – McNultyyy

1

在你的代碼的問題是,當你遍歷列表s,你實際上從來沒有使用當前的元素d

在你的代碼的一些其他意見:

  • 不想返回List而不是ArrayList的。
  • 根據Java的命名約定命名方法和變量(testMethods,而不是TestMethodsfirstChoice代替FirstChoice
  • 是你寫循環的方式一致:使用的foreach或索引,但保持相同的風格。
List<HH> testMethods(List<ArrayList<HH>> s) { 
    List<HH> scenario = new ArrayList<HH>(); 
    for (ArrayList<HH> d : s) { 
     for (HH hh : d) { 
      if (hh.firstChoice == 1) { 
       scenario.add(hh); 
      } 
     } 
    } 
    return scenario; 
}