2016-05-02 14 views
0

にコピーしていますので、これはjavaでいくつか問題があります。このメソッドは、多次元の2つのString配列を取り込むことになっています。このメソッドは、コピー文字列配列を返すことになっています。コピーメソッドに送られるこれらの2つの配列は、配列内でランダムに生成された長さを持つようになります。私はarray2が配列よりも小さいかどうかを調べようとしています。配列がarray2の長さに割り当てられ、配列の要素をarray2にコピーしたいとします。 array2がarrayより大きい場合、配列の要素をarray2にコピーし、array2のREMAININGスポットに*を埋め込むことができます。今問題は、インデックスの境界を超えてランタイムエラーが発生し続けることです。具体的には、以下の2つのアスタリスク(forループ内)で問題を示している行を示しています。この問題を解決するために私は何ができるでしょうか。多次元配列内の配列要素をJavaの

public static String[][][] copy(String[][][] array, String[][][] array2){ 
    if(array2.length < array.length){ 
     array = new String[array2.length][array2.length][array2.length]; 
     for(int i = 0; i < array2.length; i++){ 
      for(int j = 0; j < array2[i].length; j++){ 
       for(int k = 0; k < array2[i][j].length; k++){ 
        **array2[i][j][k] = array[i][j][k];** 
       } 
      } 
     } 
     return array2; 
    } 
    if(array2.length > array.length){ 

     for(int i = 0; i < array.length; i++){ 
      for(int j = 0; j < array[i].length; j++){ 
       for(int k = 0; k < array[i][j].length; k++){ 
        **array2[i][j][k] = array[i][j][k];** 
       } 
      } 
     } 
     for(int i = array.length - 1; i < array2.length; i++){ 
      for(int j = array[i].length - 1; j < array2.length; j++){ 
       for(int k = array[i][j].length - 1; k < array2.length; k++){ 
        array2[i][j][k] = "*"; 
       } 
      } 
     } 
     return array2; 
    } 
    return array; 
} 
+0

誰かが入力を提供できますか? – user181421

答えて

0

配列の各次元が等しいサイズであると仮定します。
しかし、2つの兄弟配列が同じサイズであると仮定することさえできません。
私が意味することは、array = new String[array2.length][array2.length][array2.length];はナンセンスであり、少なくとも2つの方法であることです。
arrayを再割り当てすると、nullをコピーするだけでよいので、おそらくarray2 = new String[array.length][][]が必要です。他のディメンションの長さについては、特に、array2を再割り当てしなかった場合、同じ比較と再サイズを実行する必要があります。もしそうしたら、とにかくサブレベル配列を新たに作成しなければなりません。

+0

これは始まりですが、コードの修正ではありません。デバッガを起動し、コードを理解してみてください。 Javaとその配列についての本を読んでください。 ;-) – Vampire

+0

最初のifステートメントの場合、array2の長さまでの配列要素だけがコピーされるので、array2 = new String [array.length] [] []が動作するかどうかはわかりません。 – user181421

+0

おそらくそうではありませんが、 'array'から' array2'にコピーした場合、 'array2'は' array'より小さく、 'array2.length'でトリミングする必要があります。' array'または ' array2'に新しい値を指定します。 – Vampire