2016-09-19 14 views
4

私はMatrixというクラスを作っています。そのインスタンス変数は、行数、列数、および行列を表す2D int配列(数学で)でなければなりません。それはその決定子を得るメソッド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 
} 

EDITのようにそれが見えるように、それはコンストラクタ内でそれを作成する必要があります: それとも、私が持っている必要があり、そのコンストラクタがどのように見えるように、それは、既成の2次元配列を受け入れなければなりませんクラス(この場合のint [] [])、その実装の詳細をカプセル化しなければならないので、私はそのコンストラクタでバージョンを使用する

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'コンストラクタの中にスキャナのものを入れません。 Usecaseでそれを行い、次にユーザー入力をパイプします。 – Li357

+5

最初のオプションはあまり良くありませんが、間違いなくOKです。 2番目のオプションはひどいので、決して使用しないでください。 –

答えて

0

ようにそれを初期化する方法配列の次元のみをとります。その他のようなマトリックスを修正するため

、(int型のx、int型のY、int値)などのsetValue(対応するセッターを追加する。

が述べた、マトリックスクラス内のIOを実行する理想的なソリューションではない(Separation of concerns

参照

ユーザー入力から行列を初期化するには、別のクラスを使用する必要があります ユーザー入力を取得し、ユーザー入力を解析してエラーを処理するロジックが含まれている必要があります。 Matrixクラスの適切な修飾子を使用して、新しいMatrixインスタンス

-1

コンストラクタに関するいくつかの詳細下記のご質問チェックの私の理解あたりとして、Javaで

  • コンストラクタは、オブジェクトを初期化するために使用される方法の特殊なタイプです。
  • コンストラクタは明示的な戻り値の型を持っていてはいけない
  • コンストラクタの2つのタイプがあります。1.デフォルト & 2.パラメータ化された

だから、それは適切なコンストラクタを構築するためにあなたの条件に依存し

好きなことを言ってみましょう

  • 値を初期化時のクラスに設定する場合は、パラメータ化されたコンストラクタを使用し、その中のmatrixの値を渡す必要があります。

  • あなたがクラス初期化時に値を渡すようにしたい場合、コンストラクタで値を要求する必要があり、したがってそれを構造化する必要があるとします。

だから、コンストラクタ

関連する問題