我有一个arraylist,其中包含多行双精度值的数组,称为(array1)。当我将array1添加到另一个名为(array)的arraylist并打印最后一个时,我得到的输出是一行而不是多行。
代码如下:
List<Double> array= new ArrayList<Double>();
for(int c = 0; c < cols; c++) {
List<Double> array1= new ArrayList<Double>();
for(int r = 0; r < rows; r++) {
int value =Mat[r][c];
x[c] = value;
array1.add(x[c]);
}
System.out.println(array1+" ");
array.addAll(array1);
}
System.out.println("the array" + array);
答案 0 :(得分:0)
您似乎对println的使用并不熟悉。 方法println()将字符串输出到您的命令行并添加换行符。如果传入的对象不为null,则将调用该对象的toString()方法。
有关更多信息,请阅读以下答案:https://stackoverflow.com/a/29319217/9461640
因此,您将获得一个夹层,因为List数组的toString()基本上会将其持有的所有内容打印到一个字符串中。
如果要为数组的每个元素打印一行,则必须对其进行迭代。 这可以通过很多方式来实现。
一种方法是:
for (ArrayList<double> insideArray : array) {
System.out.println(insideArray);
}
在这里查看更多迭代示例:https://crunchify.com/how-to-iterate-through-java-list-4-way-to-iterate-through-loop/
答案 1 :(得分:0)
这就是野兽的本质。如果您要求 Scanner#println()方法来打印ArrayList或List接口,则它将在一行中完成所有操作,与使用double [] Array使用以下方法一样:
String.out.println(Arrays.toString(myDoubleArray));
要从ArrayList或List接口获取特定元素,您将需要使用:
array.get(someIndexValue);
OR
array1.get(someIndexValue);
我认为您可能想做的是将打印代码行移动到内部的 for 循环中:
List<Double> array= new ArrayList<Double>();
for(int c = 0; c < cols; c++) {
List<Double> array1= new ArrayList<Double>();
for(int r = 0; r < rows; r++) {
int value =Mat[r][c];
x[c] = value;
array1.add(x[c]);
System.out.println(array1.get(r));
}
array.addAll(array1);
}
但是再说一次,如果这是您要尝试的方法,那么最好打印出 x [c] 。
如果要在内部 for 循环完成填充之后并在将其添加到 array array1 中的元素>那么您将需要遍历集合:
List<Double> array= new ArrayList<Double>();
for(int c = 0; c < cols; c++) {
List<Double> array1= new ArrayList<Double>();
for(int r = 0; r < rows; r++) {
int value =Mat[r][c];
x[c] = value;
array1.add(x[c]);
System.out.println(array1.get(r));
}
System.out.println("From Inner Loop:");
for (int e = 0; e < array1.size(); e++) {
System.out.println(array1.get(e));
}
array.addAll(array1);
}
如果要打印 array 列表中的每个元素,则需要在另一个循环中执行相同的操作: