2016-12-30 4 views
1

この問題は、メンバーが行列で最大の合計を持つ行を返す必要がある場合、問題は再帰的メソッド) あなたは現在の行のインデックスと同様に合計を保持するクラスを定義することができ、私を助けてくださいは、そのメンバーの合計が行列の最大値である行番号を見つけるのに役立つ必要があります

public class MatrixLen { 

    private int [][] _mat; 
    public MatrixLen(int sizeRow, int sizeCol) 
    { 
    _mat = new int[sizeRow][sizeCol]; 
    Random generator = new Random(); 
    for (int i = 0; i< sizeRow; i++){ 
     for (int j=0; j<sizeCol; j++){ 
      _mat[i][j] = generator.nextInt(20) - 10; 
      System.out.print(_mat[i][j]+ " "); 
     } 
     System.out.println(); 
    } 
    } 
    private int SumRow(int i){ 
     return SumRow(i,0); 
    } 
    private int SumRow(int i, int j){ 
     if(j>=_mat[i].length) return 0; 
     return _mat[i][j] + SumRow(i, j+1); 
    } 
    public int maxRow(){ 
     if(_mat.length==0) return -1; 
     return maxRow(0); 
    } 
    private int maxRow(int i){ 
     if (i == _mat.length - 1) return SumRow(i); //end case - last row 
     int max = maxRow (i + 1); 
     int thisRow = SumRow(i); 
     return thisRow > max ? thisRow : max; 
    } 
} 
+1

あなたのコードは、あなたが必要とするだけ十分に閉じています。sumRow(i)の代わりに、あなたのメソッド 'maxRow'のmax行のインデックスを返してください。乾杯。 – lrnzcig

+0

行のインデックスが返されるのは、行が最大値より大きい場合のみです。最大値のインデックスを表示する方法はわかりません。 – Meni

+0

return returnRow> indexRow()のようなものですか? i:index_max'? (もちろん、 'index_max = maxRow(i + 1)')です。とにかく、私の意見では、すでに有効な回答があります。 – lrnzcig

答えて

0

私は最大の総和を求めることで、最初に始めたが、私はさらに進行する方法を知りません。例えば。

public class IndexSum { 
    int index; 
    int sum; 

    public IndexSum(int index, int sum) { 
     this.index = index; 
     this.sum = sum; 
    } 
} 

次にMatrixLenに引数として取得するmaxRow方法を変更してもIndexSumオブジェクトを返します。この方法では、再帰中に、他の行と比較する行の合計を追跡しますが、この行の索引も追跡します。

public IndexSum maxRow() { 
    if (_mat.length == 0) return null; 
    return maxRow(new IndexSum(0, SumRow(0))); 
} 

private IndexSum maxRow(IndexSum thisRow) { 
    if (thisRow.index == _mat.length - 1) return thisRow; //end case - last row 
    IndexSum nextRow = maxRow(new IndexSum(thisRow.index + 1 , SumRow(thisRow.index + 1))); 
    return thisRow.sum > nextRow.sum ? thisRow : nextRow; 
} 
+0

いいえ、maxRowの戻り値の型を変更することはできません。できることは、別のメソッドを追加することです – Meni

0

メンバーフィールドは受け入れられますか?

int index = -1; 

private int maxRow(int i) { 
    if (i == _mat.length - 1) { 
     index = i; 
     return SumRow(i); // end case - last row 
    } 

    int max = maxRow(i + 1); 
    int thisRow = SumRow(i); 

    if (thisRow > max) { 
     index = i; 
    } 

    if (i == 0) { 
     return index; 
    } 

    return thisRow > max ? thisRow : max; 
} 
関連する問題