我应该如何在Java中初始化复杂的实例变量?

时间:2016-09-19 02:35:46

标签: java arrays class instance-variables

我正在创建一个名为Matrix的课程。它的实例变量应该是它的行数,列数,以及表示矩阵的2D int数组(在数学中)。它有方法getDeterminant()得到它的决定因素,它应该能够与另一个矩阵相乘。

我的问题是,在构造函数中,我应该如何初始化它?它是否应该接受预制的2D数组,以使其构造函数如下:

public class Matrix {
    private int[][] matrix;
    public Matrix(int[][] matrix) {
        this.matrix = matrix;
        //etc.
    }
}

或者应该在构造函数中创建它,使其看起来像

public class Matrix {
    private int[][] matrix;
    public Matrix(int rows, int columns) {
        Scanner in = new Scanner(System.in);
        //asks the user to input a matrix
    }
    //methods and the such
}

编辑: 或者,我应该有一个初始化它的方法,如

public class Matrix {
    private int[][] matrix;
    public Matrix() {
        //something else
    }
    public int[][] initializeMatrix(int rows, int columns) {
        //for loop + Scanner nextInt() to ask the user to input matrix
    }
    //methods and the such
}

2 个答案:

答案 0 :(得分:0)

一个类应该封装它的实现细节(在本例中是int [] []),所以我会使用一个只带有数组维度的构造函数的版本。

要修改矩阵,请添加相应的setter(例如setValue(int x,int y,int value)。

正如其他人所说,在矩阵类中进行IO不是一个理想的解决方案(参见Separation of concerns

要从用户输入初始化Matrix,您应该使用其他类。 它应包含用于检索用户输入,解析用户输入和处理错误的逻辑。 然后应该使用Matrix类的适当修饰符来创建新的Matrix实例。

答案 1 :(得分:-1)

根据我对您的问题的理解,请在下面查看有关构造函数的一些详细信息,

  • java中的构造函数是一种特殊类型的方法,用于初始化对象。
  • 构造函数必须没有明确的返回类型
  • 有两种类型的构造函数: 1。默认&的 2。参数

因此,这取决于您构建正确构造函数的要求

喜欢让我们说

  • 如果要在初始化时将值设置为类,则需要使用参数化构造函数并为其中的矩阵传递值。

  • 假设您希望让用户在类初始化时传递值,那么您需要在构造函数中请求值,因此您需要对其进行结构化。

所以它总是取决于我们对如何构造构造函数的要求