2011-09-04 21 views
1

因此,如果ArrayList不存在,我就得到了將數字1-9添加到單獨的ArrayList中的代碼。但是,即使我打印ArrayLists(並獲得所有正確的數字),當我打印ArrayList的.size時,它會給我1而不是9.我希望你能理解我的問題。下面的代碼:ArrayList無法顯示正確大小的問題

ArrayList[][] tillatnaSiffror = new ArrayList[9][9]; 

    for(int i=0;i<9;i++){ 
     for(int ruta=0;ruta<9;ruta++){ 

      if(tillatnaSiffror[i][ruta] == null){ 
       for(int add=1;add<=9;add++){ 
        tillatnaSiffror[i][ruta] = new ArrayList<Integer>(); 
        tillatnaSiffror[i][ruta].add(add); 
        System.out.println(tillatnaSiffror[i][ruta]); 
       } 
       System.out.println(tillatnaSiffror[i][ruta].size()); 
      } 
     } 
    } 

這給了我這個(當然,儘管九次):[1][2][3][4][5][6][7][8][9]1

現在我想知道,爲什麼我得到的1而不是9當我打印.size?

+0

** tillatnaSiffror **是什麼意思,它是什麼語言,我想知道? –

+1

'tillatnaSiffror'意思是「允許的數字」。我認爲菲利普正在寫一個soduko求解器。 – aioobe

回答

8

因爲你名單在每個迭代

tillatnaSiffror[i][ruta] = new ArrayList<Integer>(); 

即創建一個新的列表,丟掉前一個爲你添加的每個數字復位!

嘗試移出列表的創建:

,--> tillatnaSiffror[i][ruta] = new ArrayList<Integer>(); 
|  for(int add=1;add<=9;add++){ 
'-----< 
      tillatnaSiffror[i][ruta].add(add); 
      System.out.println(tillatnaSiffror[i][ruta]); 
     } 

Ideone.com demo


作爲一個方面說明,我會建議不要在這兒陣列,並使用Java集合所有辦法。考慮使用像List<List<Set<Integer>>>這樣的結構。

+1

對於ASCII藝術和在線IDE鏈接+1,頂尖 – Asaf

+0

Aaah!當然,我會因爲缺乏睡眠而責備它;)非常感謝您指出這一點,並且我會將您的想法與Collections一起考慮! –