2017-09-19 14 views
-2

私はn行とs列の配列行列を持っています。私は最小の要素を含む各列の行番号を見つける必要があります。例えば、私が最初の列内の最小要素は3番目に小さいなしであるため、最小の要素は、最初の行にある第二のカラムで、最初の行にあるので、私は0、0、2、3を期待アレイ行列ここJava:列内の2D配列(行列)の要素を比較し、その列に最小値を含む行番号を見つける

double[][]={{2, 3, 4, 6}, 
      {3, 6, 7.0, 3.3}, 
      {2.1, 3.4, 2, 7.7} 
      }; 

を有します第3列目と第4列目の最小要素は2列目にあります。 これをJavaコードでどのように実現できますか

+0

何を試しましたか? –

+1

* 2番目の列の最小要素は0番目の行にあり、3番目に小さいのは3番目の行にあります。* 3はインデックス3の行ですか? – nullpointer

+0

@nullpointer 3番目、インデックス2の行を意味します。 –

答えて

1

まず。配列には3行4列があります。各行の最小要素の列インデックスを探したいと仮定します。その場合は、コードの下に見つける:

 double arr[][] = {{2, 3, 4, 6}, 
       {3, 6, 7.0, 3.3}, 
       {2.1, 3.4, 2, 7.7} 
     }; 

     for (int i = 0; i < arr.length; i++) { 
     int column = 0; 
     for (int j = 1; j < arr[i].length; j++) { 
      column = (arr[i][column] < arr[i][j]) ? column : j; 
     } 
     System.out.println("Smallest element for row " + i + " = " + column +" th column"); 
    } 

・ホープ、このことができます;)

は(行番号を見つけるために)1を更新:

double arr[][] = {{2, 3, 4, 6}, 
       {3, 6, 7.0, 3.3}, 
       {2.1, 3.4, 2, 7.7} 
     }; 


     for(int j=0;j<arr[0].length;j++) 
     { 
      int row = 0; 
      for (int i = 1; i < arr.length; i++) { 
       row = (arr[row][j] < arr[i][j]) ? row : i; 
      } 
      System.out.println("Column = " + j + " Row = " + row); 
     } 
+0

あなたは間違った仮定をしました。私は列の中で最小の行番号を探しています。 –

+0

@LogRajBhattは更新されたコードを見ます;) –

0

ループ。

ネストされたループでこの問題を解決できます。 これはのように思えます。質問私はあなたの問題を解決するための擬似コードを提供します。

double mat[][]={{...},{...}}//declare your 2d array 

//loop through each row 
for (int i=0;i<mat.length;i++)//note mat.length is number of rows 
{ 

    int min_j=0;//for each row reset the lowest column index 
    //loop through each column 
    for (int j=0;j<mat[i].length;j++)//note mat[i].length is number of cols for row i 
    { 
     //check if this column has the lowest value 
     if(mat[i][j]<mat[i][min_j]) 
     { 
     min_j=j;//set the new lowest index 
     } 
    } 
    //print the index of the column with the lowest value for each row 
    print(min_j+','); 

} 

これはうまくいけばよいと思います。値を印刷するかどうかを指定したり、別の配列に格納してエクササイズのままにしたりしませんでした。

コメントには、列ではなく行ごとに最も低い値を指定しています。そのため コード:私はあなたがアレイの行と列について混乱していると思うすべての

double mat[][]={{...},{...}}//declare your 2d array 

//loop through each column 
for (int i=0;i<mat[i].length;i++)//note mat[i].length is number of columns in row i 
{ 

    int min_j=0;//for each column reset the lowest row index 
    //loop through each row 
    for (int j=0;j<mat.length;j++) 
    { 
     //check if this row has the lowest value 
     if(mat[j][i]<mat[min_j][i]) 
     { 
     min_j=j;//set the new lowest index 
     } 
    } 
    //print the index of the row with the lowest value for each column 
    print(min_j+','); 

} 
+0

同じ値を比較したif文を見てください。それは間違いですか?私は騙されてしまいました。それがトリックなら、ちょっと解説してください。 –

+0

はい、私はお詫び申し上げます、min_jと比較することを意味しました。固定 –

+0

各列には外側ループが必要です。 –

0

私はいくつかの変更をした、これはどう:

class Main { 
    public static void main(String[] args) { 
     double twoDArr[][] = { 
      {2, 3, 4, 6}, 
      {3, 6, 7, 3.3}, 
      {2.1, 3.4, 2, 7.7} 
     }; 

     int row = 0; 
     for(double element[] : twoDArr){ 

      int index = 0; 
      double auxNum = 999999999.0; 
      for(int i = 0; i < element.length; i++){ 
       if(element[i] < auxNum){ 
        auxNum = element[i]; 
        index = i; 
       } 
      } 

      System.out.println("row: "+ row + " Smallest: " + auxNum + " Index: " + index); 
      row++; 
     } 
    } 
} 

結果:

row: 0 Smallest: 2.0 Index: 0 
row: 1 Smallest: 3.0 Index: 0 
row: 2 Smallest: 2.0 Index: 2 
+0

ここでは、i列目の値を表示しています。彼は列のインデックスを望んでいる。 –

+0

申し訳ありませんが、期待される出力を満たしていません。すべての列に対して、その列の最小数を含む行がなければなりません。 –

+0

元のコードを修正しました。これはあなたが望んだものですか? – Floaterz

関連する問題