我無法創建二維陣列的深層副本。它在複製方法的for循環中給我一個空指針異常錯誤。另外,在我之前的版本中,它沒有正確創建深層副本。我以爲我修好了,但現在錯誤出現了。有小費嗎?二維陣列的深度複製
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的二維數組,但在調用deepCopyStringMatrix()之前不會放入任何東西。在副本中,當數組中沒有任何內容時,您正在調用input [0] .length。這會導致(NULL).length – Dakoda
@達科達這是錯誤的。 'input [0]'不爲空。 – Tom