我有一个像这样的ArrayList:
ArrayList<ArrayList<Double>> someArray = new ArrayList<ArrayList<Double>>();
它的值如下:
[1,3,2,1,3,4,5,5],[7,2,1,3,4,5,4,2,4,3],....
我希望输出看起来像这样:
1 7 . . .
3 2
2 1
1 3
.
.
.
,ArrayList中的每个列表都应显示为一列。 我尝试了各种方法,但代码将它们显示在行中..
for(int i=0;i<someArray.size();i++){
System.out.println(someArray.get(i));
}
看起来很简单但无法弄明白: - !
答案 0 :(得分:8)
你需要两个循环 - 一个循环通过内部ArrayList
,一个循环通过内部int maxSize = 0;
for (ArrayList<Double> innerList : someArray) {
if (maxSize < innerList.size()) {
maxSize = innerList.size();
}
}
for (int i = 0; i < maxSize; i++) {
for (ArrayList<Double> innerList : someArray) {
//You don't need this if all lists are the same length.
if (i > innerList.size() - 1) {
System.out.print("x ");
} else {
System.out.print(innerList.get(i) + " ");
}
}
System.out.println(); //new line for the next row
}
。你也不知道最大的列表有多长(除非你假设它们的大小都相同)。
您必须逐行打印,因此您需要迭代给定索引处的所有列表并将它们打印在同一行上。
{{1}}
答案 1 :(得分:3)
这适用于我的测试。它打印出来了:
5.5 2.5 2.5
6.5 3.5 x
x 4.5 x
x x x
现在算法:
package com.sandbox;
import java.util.ArrayList;
public class Sandbox {
public static void main(String[] args) {
ArrayList<ArrayList<Double>> someArray = new ArrayList<ArrayList<Double>>();
someArray.add(new ArrayList<Double>());
someArray.get(0).add(5.5);
someArray.get(0).add(6.5);
someArray.add(new ArrayList<Double>());
someArray.get(1).add(2.5);
someArray.get(1).add(3.5);
someArray.get(1).add(4.5);
someArray.add(new ArrayList<Double>());
someArray.get(2).add(2.5);
boolean elementsLeft = true;
int column = 0;
while (elementsLeft) {
for (ArrayList<Double> subList : someArray) {
if (subList.size() > column) {
System.out.print(subList.get(column) + " ");
}else {
System.out.print("x ");
}
}
System.out.println();
elementsLeft = isElementsLeft(someArray, column);
column++;
}
}
private static boolean isElementsLeft(ArrayList<ArrayList<Double>> someArray, int column) {
for (ArrayList<Double> subList : someArray) {
if (subList.size() > column) {
return true;
}
}
return false;
}
}
答案 2 :(得分:1)
您希望循环嵌套列表,而不是外部列表。
//Make sure at least 1 list to avoid a null reference on the next line
if(someArray.size() > 0) {
//Assuming that all the nested lists are the same length
for(int i = 0; i < someArray.get(0).size(); i++) {
for(ArrayList<Double> nestedList : someArray) {
if(list != someArray.get(0))
System.out.print(" ");
System.out.print(nestedList.get(i));
}
System.out.print("\n");
}
}
修改强>
我认为这个问题包含了一个错误,这个错误来自某人急忙想出一个例子。如果它们的长度可变,请参阅ggmathur的答案。
修改编辑:
好的,我正在将自己的实现完整性化。
String spacer = "X";
int maxSize = 0;
for(ArrayList<Double> nestedList : someArray)
maxSize = (maxSize > nestedList.size()) ? maxSize : nestedList.size();
if(maxSize > 0) {
for(int i = 0; i < maxSize; i++) {
if(list != someArray.get(0))
System.out.print(" ");
System.out.print(nestedList.size() >= i ? nestedList.get(i) : spacer);
}
System.out.print("\n");
}