Помогите мне с этим кодом Java - PullRequest
0 голосов
/ 15 апреля 2011

Вопрос :

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

}

ПРИМЕЧАНИЕ. Вы не можете использовать никакую дополнительную переменную экземпляра, кроме массива a.

Принятый ответ : @Chankey: this (b1.a.length, b1.a [0] .length); - Джон

Ответы [ 5 ]

6 голосов
/ 15 апреля 2011

Сохраните количество строк и количество столбцов в классе матрицы и создайте для них геттеры.

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 голос
/ 15 апреля 2011

Это домашнее задание, поэтому я дам вам подсказку:

Как бы вы получили длины двумерной матрицы (a[][]) от b1? правильные методы в матричном классе помогут - как бы вы их реализовали (getX, getY)?

Кроме того, лучше перенаправить конструкторы к наиболее подробным, например:

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

 matrix(int x, int y){
  a= new int [x][y];      
  }
1 голос
/ 15 апреля 2011

Используйте

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

Но это не рекомендуется. у вас должен быть метод get, который возвращает размерность матрицы

1 голос
/ 15 апреля 2011

Вам необходимо получить размер пройденной b1 матрицы

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

и затем может использовать его для построения окончательного массива.

a= new int [x][y];  
0 голосов
/ 02 октября 2013

Это может быть наиболее вероятный ответ без использования какой-либо другой переменной экземпляра, кроме самого массива:

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

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...