2013-10-03 70 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

相关问题