Car*_*ine 54 java arrays multidimensional-array
如何在不使用循环的情况下在Java中填充多维数组?我试过了:
double[][] arr = new double[20][4];
Arrays.fill(arr, 0);
Run Code Online (Sandbox Code Playgroud)
这导致了 java.lang.ArrayStoreException: java.lang.Double
提前致谢!
aio*_*obe 88
这是因为a double[][]
是一个double[]
你无法分配的数组0.0
(就像这样做double[] vector = 0.0
).事实上,Java没有真正的多维数组.
实际上,它0.0
是 Java中双精度数的默认值,因此当你得到矩阵时,矩阵实际上已经用零填充了new
.但是,如果您想填充它,比如说,1.0
您可以执行以下操作:
我不相信API提供了一种方法来解决这个问题而不使用循环.然而,使用for-each循环来做它很简单.
double[][] matrix = new double[20][4];
// Fill each row with 1.0
for (double[] row: matrix)
Arrays.fill(row, 1.0);
Run Code Online (Sandbox Code Playgroud)
tro*_*foe 62
double[][] arr = new double[20][4];
Arrays.fill(arr[0], 0);
Arrays.fill(arr[1], 0);
Arrays.fill(arr[2], 0);
Arrays.fill(arr[3], 0);
Arrays.fill(arr[4], 0);
Arrays.fill(arr[5], 0);
Arrays.fill(arr[6], 0);
Arrays.fill(arr[7], 0);
Arrays.fill(arr[8], 0);
Arrays.fill(arr[9], 0);
Arrays.fill(arr[10], 0);
Arrays.fill(arr[11], 0);
Arrays.fill(arr[12], 0);
Arrays.fill(arr[13], 0);
Arrays.fill(arr[14], 0);
Arrays.fill(arr[15], 0);
Arrays.fill(arr[16], 0);
Arrays.fill(arr[17], 0);
Arrays.fill(arr[18], 0);
Arrays.fill(arr[19], 0);
Run Code Online (Sandbox Code Playgroud)
Ray*_*oal 10
OP询问如何在没有循环的情况下解决这个问题!出于某种原因,这些天来避免循环很流行.为什么是这样?有可能是一个实现,使用map
,reduce
,filter
,和朋友,以及类似的方法each
隐藏循环和削减计划verbage并且是挺酷的.真正甜蜜的Unix管道也是如此.或jQuery代码.没有循环,事情看起来很棒.
但Java有一个map
方法吗?不是真的,但我们可以Function
使用带有eval
或exec
方法的接口定义一个.这不是一件难事,也是一项很好的锻炼.它可能很昂贵而且在实践中没有使用.
在没有循环的情况下执行此操作的另一种方法是使用尾递归.是的,它有点愚蠢,没有人会在实践中使用它,但它确实表明,在这种情况下循环是好的.尽管如此,只是为了展示"又一个循环免费示例"并获得乐趣,这里是:
import java.util.Arrays;
public class FillExample {
private static void fillRowsWithZeros(double[][] a, int rows, int cols) {
if (rows >= 0) {
double[] row = new double[cols];
Arrays.fill(row, 0.0);
a[rows] = row;
fillRowsWithZeros(a, rows - 1, cols);
}
}
public static void main(String[] args) {
double[][] arr = new double[20][4];
fillRowsWithZeros(arr, arr.length - 1, arr[0].length);
System.out.println(Arrays.deepToString(arr));
}
}
Run Code Online (Sandbox Code Playgroud)
它并不漂亮,但在回答OP的问题时,没有明确的循环.
小智 5
根据Java 8,我们可以使用这种方式。
double[][] arr = new double[20][4];
Arrays.stream(arr).forEach(a -> Arrays.fill(a, 0));
我们可以用一种更好,更智能的方式在多维数组中初始化一个值。