2D配列のディープコピーを作成できません。コピーメソッド内のforループでnullポインタ例外エラーが発生しています。また、以前のバージョンでは、ディープコピーを正しく作成していませんでした。私はそれを修正したと思ったが、今、エラーが表示されます。任意のヒント?2D配列のディープコピー
public class Test {
public static String[][] deepCopyStringMatrix(String[][] input) {
if (input == null)
return null;
String[][] result = new String[input.length][input[0].length];
for (int r = 0; r < input.length; r++) {
for(int k = 0; k< input[0].length; k++) {
result[r][k] = new String (input[r][k]);
}
}
return result;
}
public static void printBoard (String [][] board, int m, int n) {
for(int i = 0; i < m; i++) {
for(int j = 0; j < n; j++) {
System.out.print(" /" + board[i][j] + "/ ");
}
System.out.println();
}
}
public static void main (String args[]) {
String[][] test = new String[1][1];
String[][] newTest = deepCopyStringMatrix(test);
test[0][0] = "One";
newTest[1][0] = "Two";
printBoard(test,1,1);
printBoard(newTest,1,1);
}
}
編集:いくつかの回答を読んだ後、私は問題を見つけました。ありがとうございます。
文字列以外のもので内部配列を初期化すると、 'new String(input [r] [k])'はもはや失敗しません。しかし、 'new String()'を使うことはそれほど意味がありません。 – Tom
一方、main()では、testという2D配列を作成していますが、deepCopyStringMatrix()を呼び出す前に何も入れていません。コピーでは、配列に何もないときにinput [0] .lengthを呼びます。その結果、(NULL).length – Dakoda
@Dakodaこれは間違っています。 'input [0]'はnullではありません。 – Tom