2016-10-04 129 views
4

如果我是利隨本清,但我已經有最低和最高打印出正確的,我不知道位置,但我似乎無法圖出去怎麼說他們的確切的行和列。 這是我迄今爲止;如何找到一個二維數組的最大值和最小值

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]; 

我該如何聲明他們的位置?例如:(「最大數量在第1行,第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

請參閱下面的修改。我添加了變量來跟蹤最小值和最大值的索引。在循環結束時,您可以簡單地打印出maxIndex1,maxIndex2,minIndex1minIndex2

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; 
     } 

請注意,如果您有兩個值相等並且與數組中的最大值並列,那麼這將只記錄其中的一個。如果你想記錄所有關係的最小/最大位置,你可以改變這個來保存一個座標列表,而不是一個座標。

+0

值得注意的是,只有在矩陣中最大值和最小值都是唯一的情況下,這才起作用,因爲您只存儲一個位置。 – Gendarme

+0

如果你有一個排序好的數組,你可以從'else if'中刪除'else'。 – Robert

+0

@Gendarme我認爲這個例子可以滿足OP的需求,但絕對值得注意。我編輯了我的帖子,以包括這一點。 – nhouser9

1

很簡單!只需聲明2個更多的變量來存儲你的x和y座標。並且在if和else中都更新它們(不要忘記在你的if和else子句中添加花括號!)並且你擁有它們!

+2

在這種情況下,不需要大括號。 – Gendarme

+0

if語句的每個Java規範的字面語法是'如果ParExpression語句[else語句]'其中'語句'是一個塊或一行語句。我同意,花括號是不必要的,純粹是可選的和個人偏好。 – searchengine27

+1

所以,你說這很好?!如果(m [i] [j]> max)max = m [i] [j]; maxIndex1 = I; maxIndex2 = j的; –