我正在尝试将两个<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个。 所以我被困住了,感谢任何帮助。
感谢您的帮助。
答案 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));
}