2013-10-03 185 views
0

我爲長標題道歉,請讓我知道如果您能想到更好的標題!Java將ArrayList <Integer>添加到ArrayList <ArrayList <Integer>>替換ArrayList的ArrayList的所有元素

我正在做的是試圖創建一個ArrayList的ArrayList並逐個添加ArrayList。我所稱的兩個AL<AL<I>>稱爲三角形和正方形,並且我通過addToList()方法添加了AL<I>s - 將名爲temp的AL<I>添加到相應的AL<AL<I>>。 temp似乎沒有問題,但在運行完整方法figurateNumbers()後,我的AL<AL<I>>s僅包含最後一個要添加的臨時文件[98,70]。代碼如下:

import java.util.ArrayList; 
import java.util.Iterator; 

    public class problem 
    { 
     public static ArrayList<ArrayList<Integer>> triangle = new ArrayList<ArrayList<Integer>>(); 
     public static ArrayList<ArrayList<Integer>> square = new ArrayList<ArrayList<Integer>>(); 
     public static ArrayList<Integer> temp = new ArrayList<Integer>(); 

     public static void figurateNumbers() 
     //Inserts into individual arraylists, numbers, all figurate numbers square : octagonal 
     { 
      for (int ii = 1; ii < 141; ii++) 
      { 
       if ((ii * ii >= 1000) & (ii * ii < 10000)) 
        addToList(ii * ii , square); 
       if (((ii * ii + ii)/2 >= 1000) & ((ii * ii + ii)/2 < 10000)) 
        addToList((ii * ii + ii)/2 , triangle); 
      } 
} 


    public static void addToList(int num, ArrayList<ArrayList<Integer>> list) 
    //Splits the two parts of the number and inserts the arraylist into the proper arraylist 
    { 
     temp.clear(); 
     int numInt_one = Integer.parseInt(String.valueOf(num).substring(0,2)); 
     int numInt_two = Integer.parseInt(String.valueOf(num).substring(2,4)); 
     temp.add(numInt_one); 
     temp.add(numInt_two); 
     list.add(temp); 
    } 

    public static void main (String [] args) 
    { 
     figurateNumbers(); 

     System.out.println(triangle.size()); 
     System.out.println(square.size()); 
    Iterator<ArrayList<Integer>> it = square.iterator(); 
    while(it.hasNext()) 
    { 
     ArrayList<Integer> obj = it.next(); 
     System.out.println(obj); 
    } 
     System.out.println(triangle.get(25)); 
     } 
} 

任何幫助將不勝感激,無論是對於手頭上的問題,或者我使用這些數據結構。

+1

封裝是你的朋友。 –

+0

你應該學習的第一件事是,絕對不要縮寫Java中的類。如果它是'ArrayList',讓它成爲'ArrayList'。喬希布洛克可能會生氣。 –

+1

也許考慮使用'java.awt.Point'的'ArrayList'而不是'ArrayList ',因爲它看起來更乾淨,而且您似乎只使用2個元素 – vandale

回答

5

每次您在下面調用時,您都不會創建一個新的Temp實例,同樣的列表將被添加到列表中,您正在清除該列表。請記住它是添加列表的引用。

public static void addToList(int num, ArrayList<ArrayList<Integer>> list) 
    //Splits the two parts of the number and inserts the arraylist into the proper arraylist 
    { 
     // temp.clear();// this is the issue do below 
     ArrayList<Integer> temp = new ArrayList<Integer>(); 
     int numInt_one = Integer.parseInt(String.valueOf(num).substring(0,2)); 
     int numInt_two = Integer.parseInt(String.valueOf(num).substring(2,4)); 
     temp.add(numInt_one); 
     temp.add(numInt_two); 
     list.add(temp); 
    } 
2

您正在重複使用相同的溫度。不要清除()它,每次在addToList()中創建一個新的(並且爲了清晰起見使用局部變量)。

此外,在addToList中,比所有那些字符串操作更容易分割或模100(oops,1000?NO返回100)。例如

int numInt_one = num/100; 
int numInt_two = num % 100; 

最後一個小建議:在你的figurateNumbers()循環中,你不能在34開始嗎?雖然速度增益可能不值得努力,但我的數學家想要這樣做。 :-)

+0

100.該字符串的長度爲4個字符,由一對2位數值 – vandale

+0

指出 - 請參閱編輯 – user949300

相關問題