2016-10-04 24 views
4

私はこれではっきりしているかどうかわかりませんが、私はすでに最小値と最大値の印刷ができていますが、彼らは正確な行と列をどのように言うのか。 これは私が今まで持っているものです。2次元配列の最大値と最小値の位置を見つける方法

double max = m[0][0]; 
     double min = m[0][0]; 
    System.out.println("The matrix is : "); 

     for(int i = 0; i < m.length; i++) 
     { 
      for (int j = 0; j < m[i].length; j++) 
      { 
       System.out.printf(" " + "%6.1f " , m[i][j]); 
       if (m[i][j] > max) 
        max = m [i][j];  

       else if 
       (m[i][j] < min) 
        min = m [i][j]; 

どのように私は彼らの場所を言うことができますか?例えば:( "Maximun number is in row 1、column 2")... 私は本当に助けていただければ幸いです。

+3

'max = m [i] [j]'を実行するときは、その場所も保存してください。だから、一番上に 'double max = m [0] [0]; int x = 0; int y = 0; 'xとyは座標です。だから、 'max = m [i] [j]'では 'x = i; y = j; '。 – Gendarme

+0

一般に、最大値と最小値を保存する最も良い方法は、オプションがある場合は、配列に値を入力する際に​​、実行中の最大値と最小値のタブを維持することです。あなたは配列に値をどのように入力するのかを示していないので、それを制御しているのか、それとも外的な力なのか分かりません。値を配列に入力する場合は、事前にその情報を知る能力を持っていることを考慮すると、事実が不要で無駄である場合は、それを検索しようとします。 – searchengine27

答えて

3

以下の変更を参照してください。 minとmaxのインデックスを追跡する変数を追加しました。ループの最後に、maxIndex1,maxIndex2,minIndex1、およびminIndex2を単純に印刷することができます。

double max = m[0][0]; 
double min = m[0][0]; 

//declare variables to track the indices of the min and max 
int maxIndex1 = -1; 
int maxIndex2 = -1; 
int minIndex1 = -1; 
int minIndex2 = -1; 

System.out.println("The matrix is : "); 
for(int i = 0; i < m.length; i++) 
{ 
    for (int j = 0; j < m[i].length; j++) 
    { 
     System.out.printf(" " + "%6.1f " , m[i][j]); 
     if (m[i][j] > max) 
     { 
      max = m [i][j]; 
      //record the indices of the new max 
      maxIndex1 = i; 
      maxIndex2 = j; 
     } 
     else if (m[i][j] < min) 
     { 
      min = m [i][j]; 
      //record the indices of the new min 
      minIndex1 = i; 
      minIndex2 = j; 
     } 

2つの値が等しく、配列の最大値に対応する2つの値を持つ場合、これは2つのうちの1つのみを記録することに注意してください。すべてのタイの位置を最小/最大で記録する場合は、これを変更して1つの座標の代わりに座標のリストを保存することができます。

+0

これは、1つの場所だけを保存しているので、最大値と最小値がマトリックス内で一意である場合にのみ機能することに注意してください。 – Gendarme

+0

ソートされた配列を持つ場合に、 'else if'から' else'を削除することができます。 – Robert

+0

@Gendarme私は、この例がOPが望んでいるものに対してはうまくいくと思うが、注目に値することは間違いない。私はそれを含めるために自分の投稿を編集しました。 – nhouser9

1

これは簡単です! xとyの座標を格納する変数を2つ宣言するだけです。 ifとelseの両方の中でそれらを更新します(ifとelse節に中括弧を追加することを忘れないでください)!

+2

この場合、中括弧は必要ありません。 – Gendarme

+0

if文のJava仕様に基づくリテラル文法は、if ParExpression Statement [else文] 'であり、' Statement'はブロックまたは1行の文です。私は同意します、中括弧は不必要で純粋にオプションで個人的な好みです。 – searchengine27

+1

だから、これはいいと言っているのですか? if(m [i] [j]> max)max = m [i] [j]; maxIndex1 = i; maxIndex2 = j; –

関連する問題