二维arraylists和输入/排序

时间:2012-01-30 00:22:36

标签: java arrays multidimensional-array arraylist

我正在尝试将两个<end>个实例之间的所有双精度数添加到一个arraylist中的arraylist中(在<end>的每个索引处都有<end>之间的双精度数,依此类推)

ArrayList<ArrayList<Double>> myArr = new ArrayList<ArrayList<Double>>();
int j = 0;
int nLine = 0;

    while(scan.hasNext()) {
        String line = scan.next();

        //System.out.println(line);
        if(!line.equals("<end>")) {
            nLine = Double.valueOf(line);
            ArrayList<Double> row = new ArrayList<Double>();
            myArr.add(row);


            row.add(j, nLine);
            j=j++;

        } else {
            j=j++;
        }
    }

现在,代码在一个数组中放入一个double(与语句之间的所有代码相对;因此输出如下所示: [[1.4],[3],[15],[3.2]等等。

我希望它看起来像这样: [[1.4,3,15,3.2],[5,13.4],[954.3等等......

它正在扫描的文件基本上是:

<end>
1.4
3
15
3.2
<end>
5
13.4
<end>
954.3
43 etc. etc. (infinitely)

我的目标(最终)是计算每个arrayList索引中有多少双打,并确保没有双打完全相同,并确保每个行数组中的每个行数不超过10个。 所以我被困住了,感谢任何帮助。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

ArrayList<ArrayList<Double>> myArr = new ArrayList<ArrayList<Double>>();
int nLine = 0;

ArrayList<Double> currArr = null;

while(scan.hasNext()) {
    String line = scan.next();

    if(!line.equals("<end>")) {
        nLine = Integer.valueOf(line);

        currArr.add(nLine);
    } else {
        if(currArr!=null) myArr.add(currArr);

        currArr = new ArrayList<Double>();
    }
}

if(currArr!=null) myArr.add(currArr);

在代码中间,您使用Integer代替Double。不知道为什么我离开了。代码假定输入始终以<end>开头。

答案 1 :(得分:0)

您可以使用HashSet作为跟踪重复项的方法(或者更好地使用集合的ArrayList来避免额外的数据结构)

这是一个生成随机数量的ArrayLists而没有重复的示例:

ArrayList<ArrayList<Integer>> myArr = new ArrayList<ArrayList<Integer>>();      
HashSet<Integer> duplicates = new HashSet<Integer>();
Random random = new Random();

for(int x=0; x<3; x++) {
    ArrayList<Integer> row = new ArrayList<Integer>();
    myArr.add(row);
    for(int y=0; y<3; y++) {
        int randomInt = random.nextInt(100);
        if(!duplicates.contains(randomInt)) {
            row.add(0,randomInt);
            duplicates.add(randomInt);
        }
    }
}

for(int i=0;i<myArr.size();i++)
{
    System.out.println(myArr.get(i));
}