2016-09-19 79 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.參數

所以它取決於你的需求來構建適當的構造

讚我們說

  • 如果您想在初始化時爲類設置值,那麼您需要帶參數化構造函數併爲其中的矩陣傳遞值。

  • 假設您希望在類初始化時讓用戶傳遞值,那麼您需要在構造函數中請求值,因此需要對其進行構造。

所以它總是依賴於我們的要求對如何構建構造