2016-09-19 77 views
4

我在做一个名为Matrix的课。它的实例变量应该是它的行数,列数和一个代表矩阵的二维诠释数组(在数学中)。它有方法getDeterminant()它得到它的决定因素,它应该能够与另一个矩阵相乘。我应该如何在Java中初始化一个复杂的实例变量?

我的问题是,在构造函数中,我应该如何初始化它?如果它接受一个预制的二维数组,这样它的构造是这样的:

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 
} 
+0

我会更喜欢* * **的**第一选择。 –

+0

您可以根据选择创建两者。我不会把扫描仪的东西放在'int,int'构造函数中。做一个用例,然后管用户输入 – Li357

+5

第一个选项不是很好,但肯定没问题。第二个选择是可怕的,不应该使用。 –

回答

0

类应该封装及其实施细则(在这种情况下,INT [] []),所以我会用一个版本,一个构造函数,仅占用数组的维数。

用于修改矩阵,添加相应的设置器(例如的setValue(INT的x,INT Y,int值)。

正如其他人指出,矩阵类中做IO是不是一个理想的解决方案(参见Separation of concerns

对于来自用户输入初始化矩阵,你应该使用不同的类。 它应该包含逻辑检索用户输入,解析用户输入和处理错误。 人们应该然后使用Matrix类的适当修饰,以创建新的Matrix实例。

-1

按我下面关于构造一些细节你的问题检查的理解,

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

所以它取决于你的需求来构建适当的构造

赞我们说

  • 如果您想在初始化时为类设置值,那么您需要带参数化构造函数并为其中的矩阵传递值。

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

所以它总是依赖于我们的要求对如何构建构造