帮助我使用这个Java代码

时间:2011-04-15 10:15:49

标签: java copy-constructor

问题

matrix m1 = new matrix(); // should produce a matrix of 3*3

matrix m2 = new matrix(5,4); //5*4

matrix m3 = new matrix(m2); //5*4

复制构造函数中应该有什么来制作与m2相同顺序的新矩阵m3?

 public class matrix {

    int a[ ][ ];

       matrix(){
        a = new int[3][3];  
      }

     matrix(int x, int y){
        a= new int [x][y];      
      }

     matrix (matrix b1){        
      //how to use value of x and y here....
      }

void show(){

        System.out.println(a.length);
        for(int i=0;i<a.length;i++){
            System.out.print(a[i].length);      
            }
        } 
     }




public class matrixtest { 

public static void main(String [ ] args){   

       matrix a = new matrix();     
       matrix b = new matrix(5,4);  
       matrix c  = new matrix (b);  
       a.show(); 

       b.show(); 

       c.show(); 
   } 

}

注意:除了数组a。

之外,您不能使用任何额外的实例变量

接受的答案:@Chankey:this(b1.a.length,b1.a [0] .length); - John

5 个答案:

答案 0 :(得分:6)

存储矩阵类中的行数和列数,并为它们创建getter。

public class Matrix {
    int[][] a;
    int rowNum;
    int colNum;

    //...
    public Matrix(Matrix b) {
       a=new int[b.getRowNum()][b.getColNum()];
       this.rowNum = b.getRowNum();
       this.colNum = b.getColNum();
    }

    public int getRowNum() {
       return this.rowNum;
    }


}

答案 1 :(得分:1)

您需要获取传递的b1矩阵的大小

int x = b1.length;
int y = b1[0].lenght;

然后可以用它来构造最终的数组。

a= new int [x][y];  

答案 2 :(得分:1)

使用

  a =new int[b1.a.length][b1.a[0].length];

但不建议这样做。 你应该有一些get方法,返回 矩阵维度。

答案 3 :(得分:1)

这是作业,所以我会给你一个提示:

你如何得到b1的二维矩阵(a[][])的长度?矩阵类中的正确方法将有所帮助 - 您将如何实现这些(getX,getY)?

此外,最好将构造函数重定向到最详细的构造函数,例如:

matrix(){
    this(3,3);  // call the constructor below with parameters 3,3
  }

 matrix(int x, int y){
  a= new int [x][y];      
  }

答案 4 :(得分:0)

如果不使用除数组本身之外的任何其他实例变量,这可能是最可能的答案:

import java.io.*;
class matrix
{
private int arr[][];
public matrix() //Default Constructor
{
    this(3,3);
}

public matrix(int r,int c) //Parameterized Constructor
{
    arr=new int[r][c];
    read();
}

public matrix(matrix m)  //Copy Constructor
{
    System.out.println("Fetching array...");
    int r,c;
    r=m.arr.length;
    c=m.arr[0].length;
    arr=new int [r][c];
    for(int i=0;i<r;i++)
    {
        for(int j=0;j<c;j++)
        {
            arr[i][j]=m.arr[i][j];
        }
    }
}

public void read()
{
    int i,j,r,c;
    r=arr.length;
    c=arr[0].length;
    Console con=System.console();
    for(i=0;i<r;i++)
    {
        for(j=0;j<c;j++)
        {
            arr[i][j]=Integer.parseInt(con.readLine());
        }
    }
}
public void show()
{
    int i,j;
    for(i=0;i<arr.length;i++)
    {
        for(j=0;j<arr[0].length;j++)
        {
            System.out.print(" "+arr[i][j]);
        }
        System.out.println();
    }
}

}