从方法数组参数创建多维String数组

时间:2016-04-04 23:06:55

标签: java arrays multidimensional-array

我试图解决一个半难的问题,我试图创建一个数组,并根据恰好是二维int数组的参数返回一个三维数组。我试图返回的数组是一个3维的String数组。所以这是代码:

public class Displaydata {

    static String[][][] makeArray(int[][] dimensions) {
       String myArray[][][];
           for (int i = 0; i < dimensions.length; i++) {

               for (int j = 0; j < dimensions[i].length; j++) {
                   myArray[][][] = new String[i][j][]; //getting error here.

               }

           }
           return myArray;

    }

    static void printArray(String[][][] a) {
    for (int i = 0; i < a.length; i++) {
        System.out.println("\nrow_" + i);
        for (int j = 0; j < a[i].length; j++) {
                    System.out.print( "\t");
            for (int k = 0; k < a[i][j].length; k++) 
                            System.out.print(a[i][j][k] + " ");
                            System.out.println();
        }
    }
    }

    public static void main(String[] args) {
        int [][] dim = new int[5][];
        dim[0] = new int[2];
        dim[1] = new int[4];
        dim[2] = new int[1];
        dim[3] = new int[7];
        dim[4] = new int[13];
        dim[0][0] = 4;
        dim[0][1] = 8;
        dim[1][0]  = 5;
        dim[1][1] = 6;
        dim[1][2] = 2;
        dim[1][3] = 7;
        dim[2][0] = 11;
        for (int i = 0; i < dim[3].length;i++)
            dim[3][i] = 2*i+1;
        for (int i = 0; i < dim[4].length;i++)
            dim[4][i] = 26- 2*i;
        String[][][] threeDee = makeArray(dim);
        printArray(threeDee);   
    }


}

从源代码中可以看出,当我尝试创建一个我试图返回的三维数组的实例时,我遇到了错误。我应该创建一个三维数组,顶层行的数量由维度的长度决定,对于每个顶级行i,二级行的数量由维度的长度决定[i ]。顶层行i的第二级行j中的列数由dimension [i] [j]的值确定。每个数组元素的值是其顶级行索引与其第二级行索引及其列索引的串联,其中索引由字母表示:'A'代表0,'B'代表1等。当然,如果指数不超过25,这只会是真的。)我不一定知道我哪里出错了。谢谢!

4 个答案:

答案 0 :(得分:1)

我猜你应该把数组初始化为 myArray = new String[i][j][]; //getting error here.

答案 1 :(得分:1)

我认为

   myArray[][][] = new String[i][j][]; //getting error here.

应该是:

   myArray[i][j] = new String[5]; // I have no idea how big you want to go.

然后你可以填写你最内层阵列的每个元素:

   myArray[i][j][0] = "first item";
   myArray[i][j][1] = "second string";
   ...

答案 2 :(得分:1)

您不应该在循环的每次迭代中初始化数组。在循环外部初始化它,然后在循环内填充它。

static String[][][] makeArray(int[][] dimensions) {
   String[][][] myArray = new String[25][25][1];
       for (int i = 0; i < dimensions.length; i++) {
           for (int j = 0; j < dimensions[i].length; j++) {
               myArray[i][j][0] = i + "," + j;
           }

       }
       return myArray;
}

我只是为前两个尺寸的大小插入了值,您需要根据放在那里的内容来计算它们。 &#39; i&#39;值总是 dimensions.length 但是&#39; j&#39; value将是 dimensions [0]返回的最大值.length - &gt;尺寸[n-1] .length 其中&#39; n&#39;是第二维中的元素数。

此外,您还需要设置一种方法来转换“我”中的数字。和&#39; j&#39;字母,也许使用地图。

答案 3 :(得分:0)

我认为您应该将该行更改为:

myArray = new String[i][j][]; //look ma! no compiler error

此外,您需要将myArray初始化为合理的内容(也许null?)