2016-04-04 22 views
-1

私は配列を作成しようとしている半難しい問題を解決しようとしています。次元のint配列です。私が返そうとしている配列は、3次元の文字列配列です。だからここのコードは次のとおりです。メソッド配列パラメータから多次元文字列配列を作成する

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次元配列のインスタンスを作成しようとすると、私はエラーを取得しています、ソースコードから見ることができるように。私は、次元の長さによって決定される最上位行の数を持つ3次元配列を作成することになっていて、各最上位行iについて、第2レベル行の数は次元[i ]。最上位行iの第2レベル行jの列数は、dimensions [i] [j]の値によって決まります。各配列要素の値は、最上位の行インデックスと第2レベルの行インデックスと列インデックスとの連結で、インデックスは文字で表されます。 'A'は0、 'B'は1などです。もちろん、これはインデックスが25を超えない場合にのみ当てはまります。)私はどこに間違っているのか必ずしも分かりません。ありがとう!私はあなただけにその行を変更すべきだと思う

+3

"_エラーが発生しました... _"エラーは何ですか?あなたはスタックトレースを投稿できますか? – csmckelvey

+0

Greetings takendarkk、プログラムがコンパイルされないためスタックトレースが利用できません。私はコンパイルを防ぐために何をやっているのか分かりません。あなたが共有する洞察力があるなら、どうかしてください。ありがとう! – Linuxn00b

+0

コンパイルエラーとは何ですか? – csmckelvey

答えて

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

最初の2つのディメンションのサイズの値を差し込んだだけで、そこに配置した値に基づいて計算する必要があります。 'i'の値は常にdimensions.lengthですが、 'j'の値はdimension [0] .length - > dimensions [n-1] .lengthから返される最大値になります。第2次元の要素の数。

また、「i」と「j」の数字を文字に変換する方法を設定する必要があります。おそらくマップを使用します。

+0

ありがとう – Linuxn00b

0

:また

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

、あなたは賢明な何かにmyArrayを初期化する必要があるだろう

1

私はあなたが として配列を初期化する必要がありますね(たぶんnull?) myArray = new String[i][j][]; //getting error here.

1

私は

を考えます

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

そして、あなたは最も内側の配列などのようなあなたの各要素を埋めることができます:

10は、あるべき

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