Извините за мой элементарный вопрос Java. Существует следующий классJava, clone() проблемы?
public class Matrix {
public final double[][] items;
private final int rows_count, columns_count;
public Matrix(final int rows_count_, final int columns_count_) {
rows_count = rows_count_; columns_count = columns_count_;
items = new double[rows_count][columns_count];
}
public Matrix(final double[][] data) {
rows_count = data.length;
columns_count = data[0].length;
items = new double[rows_count][columns_count];
for (int i = 0; i < rows_count; i++)
for (int j = 0; j < columns_count; j++)
}
public Matrix copy() {
Matrix AC = new Matrix(rows_count, columns_count);
for (int i = 0; i < rows_count; i++)
for (int j = 0; j < columns_count; j++)
AC.items[i][j] = items[i][j];
return AC;
}
public Matrix clone() { return this.copy }
public void test (Matrix B) {
B = this.clone();
B.items[0][0] = 1;
}
Внутри испытания метода следующее присваивание делается
B = A
Вызов
double[][] d = { { 1, 2, 3 }, { 4, 5, 6 }, { 1, 0, 1} };
Matrix A = new Matrix(d);
Matrix B= new Matrix(3,3);
A.test(B);
B.print();
результаты удивительны. Несмотря на то, что
B = this.clone()
Полученная матрица В имеет нули.
0.0 0.0 0.0
0.0 0.0 0.0
0.0 0.0 0.0
Это выглядит так, как будто B передается по значению :-) Переписывая тест() так, как
public void test (Matrix B) {
B.items[0][0] = 1;
}
матрица B модифицируется правильно
1.0 0.0 0.0
0.0 0.0 0.0
0.0 0.0 0.0
Где проблема , возможно, неправильно написанный метод копирования/клонирования? Как исправить проблему и выполнить назначение B = A? Спасибо за вашу помощь.
'' B' внутри test() 'установлен в новый экземпляр' Matrix'. Исходная матрица не изменяется. – Phylogenesis
@ Филогенез: Как написать правильное назначение B = A? – justik
В вашем кодовом коде используйте 'B = A.copy();'. Не пытайтесь делать это внутри метода экземпляра. – Phylogenesis