kopiering af et objekt
Hej,I følgende klasse vil jeg gerne kunne \"kopiere\" de argumenter der gives i constructor\'ne.
Som det er nu, så får jeg en reference til det oprindelige objekt (eller rettere det oprindelige objekts variable) hvilket IKKE er hensigtsmæssigt!
Hvad gør jeg???
public class Matrix extends java.lang.Object {
public double[][] matrix;
public java.awt.Dimension dim;
public Matrix() {
dim = new java.awt.Dimension(0,0);
}
public Matrix(double[] ent,int bredde,int hoejde) {
if (ent.length != bredde*hoejde)
dim = new java.awt.Dimension(0,0);
else {
matrix = new double[hoejde][bredde];
for (int i = 0 ; i < hoejde ; i++)
for (int j = 0 ; j < bredde ; j++)
matrix[i][j] = ent[i*j+j];
dim = new java.awt.Dimension(bredde, hoejde);
}
}
public Matrix(double[][] mat) {
matrix = mat;
dim = new java.awt.Dimension(mat[0].length, mat.length);
}
public Matrix(Matrix mat) {
this.matrix = mat.matrix;
this.dim = mat.dim;
}
public java.lang.String toString() {
java.lang.StringBuffer sb = new java.lang.StringBuffer(\"[\");
for (int i = 0 ; i < dim.getHeight() ; i++) {
sb.append(\"[\");
for (int j = 0 ; j < dim.getWidth() ; j++) {
if (j!=0) sb.append(\", \");
sb.append(matrix[i][j]);
}
sb.append(\"]\\n\");
}
sb.append(\"]\");
return sb.toString();
}
public Matrix multMatrix(Matrix mat) {
if (dim.getWidth() != mat.dim.getHeight()) return null;
double[][] ent = new double[(int) dim.getHeight()][(int) mat.dim.getWidth()];
for (int i = 0 ; i < ent.length ; i++)
for (int j = 0 ; j < ent[0].length ; j++) {
ent[i][j] = 0;
for (int k = 0 ; k < dim.getWidth() ; k++)
ent[i][j] += matrix[i][k]*mat.matrix[k][j];
}
return new Matrix(ent);
}
public Matrix multConstant(double k) {
Matrix mat = new Matrix(this);
for (int i = 0 ; i < dim.getHeight() ; i++)
for (int j = 0 ; j < dim.getWidth() ; j++)
mat.matrix[i][j] *= k;
return mat;
}
public Matrix add(Matrix mat) {
if (dim.getWidth() != mat.dim.getWidth() || dim.getHeight() != mat.dim.getHeight()) return null;
Matrix matr = new Matrix(this);
for (int i = 0 ; i < dim.getHeight() ; i++)
for (int j = 0 ; j < dim.getWidth() ; j++)
matr.matrix[i][j] += mat.matrix[i][j];
return matr;
}
public Matrix transponer() {
if (dim.getHeight() != dim.getWidth()) return null;
double buff;
Matrix mat = new Matrix(this);
for (int i = 0 ; i < dim.getHeight() ; i++)
for (int j = 1+i ; j < dim.getWidth() ; j++) {
buff = mat.matrix[i][j];
mat.matrix[i][j] = mat.matrix[j][i];
mat.matrix[j][i] = buff;
}
return mat;
}
}
el Gnu
( )
00///////>
~ /\\ /\\
