簡體   English   中英

從方法數組參數創建多維String數組

[英]Creating a multi-dimensional String array from a method array parameter

我正在嘗試解決一個半困難的問題,其中我試圖創建一個數組並根據碰巧是2維int數組的參數返回3維數組。 我嘗試返回的數組是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);   
    }


}

從源代碼中可以看到,嘗試創建要返回的3維數組實例時出現錯誤。 我應該創建一個三維數組,其中頂層行的數量由維度的長度確定,並且對於每個頂層行i,二級行的數量由維度的長度確定[i ]。 頂級行i的第二級行j中的列數由Dimensions [i] [j]的值確定。 每個數組元素的值是其頂級行索引與第二級行索引與列索引的串聯,其中索引用字母表示:“ A”代表0,“ B”代表1,以此類推。當然,只有在索引不超過25時,這才是正確的。)我不一定知道我要去哪里。 謝謝!

我猜你應該將數組初始化為myArray = new String[i][j][]; //getting error here. myArray = new String[i][j][]; //getting error here.

我認為

   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";
   ...

您不應在循環的每次迭代中初始化數組。 在循環外將其初始化一次,然后在循環內進行填充。

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;
}

我只是插入了前兩個維度的大小的值,您將需要根據在其中輸入的內容來計算它們。 “ i”值將始終為Dimensions.length,但“ j”值將是從Dimensions [0] .length-> Dimensions [n-1] .length返回的最大值,其中“ n”是其中的元素數第二個維度。

另外,您將需要設置一種將“ i”和“ j”中的數字轉換為字母的方法,也許使用Map。

我認為您應該將該行更改為:

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

另外,您需要將myArray初始化為明智的設置(也許為null ?)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM