2011-04-15 130 views
0

問題幫我這個Java代碼

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 

應該是什麼那裏的拷貝構造函數,使同一順序的一個新的矩陣M3爲M2的?

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(); 
    } 

} 

注意:您不能使用任何額外的實例變量數組時除外。

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

+0

使用一個新的= INT [b1.a.length] [b1.a [0]。長度]。 – 2011-04-15 10:20:04

+1

'this(b1.a.length,b1.a [0] .length);' – 2011-04-15 10:20:45

+0

只需要添加,它是**首選**,您的類名以大寫字母開頭。 – 2011-04-15 10:25:39

回答

6

存儲矩陣類中的行數和列數,併爲它們創建getter。

+1

對於面向對象和封裝答案(不直接訪問'b.a')! – MByD 2011-04-15 10:27:57

+0

謝謝,但我知道這種方法。我被要求在不使用任何實例變量的情況下解決問題。約翰已經在評論中給出瞭解決方案,但我認爲我也應該接受你的答案。 :) – 2011-04-15 17:16:42

1

你需要獲得通過b1矩陣

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

的大小,然後可以用它來構建最終陣列。

a= new int [x][y]; 
+0

b1沒有長度屬性,它不是數組。 – MByD 2011-04-15 10:21:16

+1

+1雖然它應該是「b1.a.length」 – pablochan 2011-04-15 10:21:33

1

使用

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

但不推薦使用。 你應該有一些get方法,它返回 矩陣的維數。

1

這是家庭作業,所以我會給你一個提示:

你將如何獲得b1的2維矩陣(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];  
    } 
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(); 
    } 
} 

}