打印3d数组中的所有值

时间:2014-05-23 15:18:50

标签: java arrays multidimensional-array

有没有办法在3d数组中打印所有值?

这是我得到的但得到空指针异常:

        int i = 2;
        int x = 15;
        String[][][] arrays = new String[x][x][i];
        String arraytext = "hello";


            for (String[][] row: arrays)
             Arrays.fill(row, arraytext);


            for (int a = 0; a<=x; a++){
              for (int b = 0; b<=x; b++){
                  for (int j = 0; j<=i; j++)
                      {System.out.println(arrays[a][b][j]);}

                                    }
                                }

7 个答案:

答案 0 :(得分:4)

填充阵列时遇到问题。你到了

java.lang.ArrayStoreException: java.lang.String at Arrays.fill(row, arraytext);

这是因为你正在尝试在期望String [] []时添加一个String。 对于打印,您可以使用Arrays.deepToString()作为答案。

System.out.println(Arrays.deepToString(arrays));

示例:

public static void main(String[] args) {
        String[][][] array3d = new String[10][10][10];

         for(String [] [] array2d : array3d){
             for(String[] array : array2d){
                 Arrays.fill(array, "hello");
             }
         }

         System.out.println(Arrays.deepToString(array3d));

    }

答案 1 :(得分:1)

问题在于:

for (String[][] row: arrays)
     Arrays.fill(row, arraytext);

尝试将row(一个 double 字符串数组)传递给期望单个字符串数组的函数。要获得3D数组的最低级别,您需要:

for (String[][] slice: arrays)
    for (String[] row: slice)
        Arrays.fill(row, arraytext);

您的双循环中的其他答案也解决了这两个问题:除非您将<=更改为<,并且sub不是,否则您将获得超出范围的索引没定义。

答案 2 :(得分:0)

您的阵列超出范围,而不是<=尝试<

for (int a = 0; a < x; a++){
          for (int b = 0; b < x; sub++){
              for (int j = 0; j < i; j++)
                  {System.out.println(arrays[a][b][j]);}

                                }
                            }

另外,sub是什么?您的代码段应显示您定义此变量的位置。

答案 3 :(得分:0)

看起来您遇到了1次错误(使用<代替<=):

for (int a = 0; a<x; a++){
   for (int b = 0; b<x; b++){
      for (int j = 0; j<i; j++)
      {System.out.println(arrays[a][b][j]);}

   }
}

因为您将arrays声明为

String[][][] arrays = new String[x][x][i];

对于前两个索引,边界从0到x-1,对于thrid索引,边界从0到i-1

答案 4 :(得分:0)

此外,您在第二个循环中递增未知变量sub而不是b

答案 5 :(得分:0)

您只是忘了从copy-pastaing中替换临时值

for (int a = 0; a<=x; a++){
    for (int b = 0; b<=x; sub++){ // sub here <---
        for (int j = 0; j<=i; j++) {
            System.out.println(arrays[a][b][j]);
        }
    }
}

另见@ jh314的回答,你做错了一次

答案 6 :(得分:-1)

package academy.learnprogramming;

import java.util.Arrays;

public class Print3DArray {

public static void main(String[] args) {

    // declare & initialize an int 3D array firstInt3D
    int[][][] firstInt3D = {
            {{1,2}},
            {{3,4}},
            {{5,6,7,8},{9,10}},
            {{11},{12,13,14}},
    };



    // print all values of firstInt3D page by page
    int x = 0;
    for (int[][] accessPage: firstInt3D){
        System.out.println("page:" + x);
        if (x < firstInt3D.length) x++;
        for (int[] accessRow: accessPage){
            System.out.println(Arrays.toString(accessRow));
        }
        System.out.println();
    }
}

}