在Java中将三维数组的所有值设置为零的最佳方法是什么?

Eri*_*son 11 java arrays multidimensional-array

我有一个三维数组,我想重置为零.似乎应该有一个简单的方法来做这个不涉及三个for循环:

for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
        for (int k = 0; k < n; k++) {
            cube[i][j][k] = 0;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Yis*_*hai 29

如果您使用的是JDK 1.5或更高版本:

    for (int[][] square : cube) {
        for (int[] line : square) {
            Arrays.fill(line, 0);
        }
    }
Run Code Online (Sandbox Code Playgroud)


Mne*_*nth 14

初始化后,数组将用零填充:

int[][][] cube = new int[10][20][30];
Run Code Online (Sandbox Code Playgroud)

这也可以在以后做,将它们重置为零,它不仅限于声明:

cube = new int[10][20][30];
Run Code Online (Sandbox Code Playgroud)

只需创建一个新数组,它就用零初始化.如果您有一个持有对数组的引用的位置,则此方法有效.不关心旧数组,那将是垃圾收集.

如果您不想依赖于该语言的这种行为,或者您不能替换所有出现的对旧数组的引用,那么您应该像Jjnguy所提到的那样使用Arrays.fill():

for (int i = 0; i < cube.length; i++)
{
   for (int j = 0; j < cube[i].length; j++)
   {
      Arrays.fill(cube[i][j], 0);
   }
}
Run Code Online (Sandbox Code Playgroud)

Arrays.fill似乎也在内部使用了一个循环,但它看起来通常更优雅.

  • 然后只是声明一个新的数组,旧的数组将被垃圾收集,如果没有引用它 (4认同)

bru*_*nde 13

好吧,似乎你可以放弃旧数组并创建一个新数组:

int size = 10;
cube = new int[size][size][size];
Run Code Online (Sandbox Code Playgroud)

  • 只有在其他地方没有(旧)数组的引用时才有效 (3认同)

jjn*_*guy 5

for (int i = 0; i < arr.length; i++){
    for (int j = 0; j < arr[i].length){
        Arrays.fill(arr[i][j], 0);
    }
}
Run Code Online (Sandbox Code Playgroud)

这样你就可以使用Arrays.fill摆脱一个额外的循环;

要么

arr = new double[arr.length][arr[0].length][arr[0][0].length];
Run Code Online (Sandbox Code Playgroud)

不幸的是,这假设阵列至少是length >= 1.