2016-10-04 3 views
4

Я не знаю, ясно ли я с этим, но у меня уже есть минимальная и максимальная распечатка справа, но я не могу показаться как сказать точные строки и столбцы, в которых они находятся. это то, что я до сих пор;Как найти местоположение максимального и минимального значения массива 2d

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

Вообще говоря, лучший способ хранения max и min - хранить вкладки «running» max и min, когда вы вводите значения в массивы, если у вас есть возможность. Вы не указали, как вводите значения в массив, поэтому я не знаю, контролируете ли вы это или если это внешняя сила. Если вы вводите значения в массивы, а затем пытаетесь найти их после того, как факт не является ненужным и расточительным, если у вас уже есть возможность знать эту информацию заранее. – 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; 
     } 

Обратите внимание, что если у вас есть два значения, которые равны и связаны для максимального значения в массиве, это будет записывать только один из двух. Если вы хотите записать позиции всех связей для min/max, вы можете изменить это, чтобы сохранить список координат вместо одной координаты.

+0

Стоит отметить, что это работает, только если значения max и min уникальны в матрице, поскольку вы сохраняете только одно местоположение. – Gendarme

+0

Вы можете удалить 'else' из' else if', если у вас есть отсортированный массив. – Robert

+0

@Gendarme Я думаю, что этот пример будет работать для того, что хочет OP, но это определенно стоит отметить. Я отредактировал мой пост, чтобы включить это. – nhouser9

1

Это очень просто! Просто объявите еще 2 переменных для хранения координат x и y. И обновите их как внутри, так и в другом (не забудьте добавить фигурные скобки в предложение if и else!), И у вас их есть!

+2

В этом случае фигурные скобки не нужны. – Gendarme

+0

Буквальная грамматика по спецификации Java для оператора if: 'if Statement выражение [else Statement]' где 'Statement' - это блок или оператор одной строки. Я согласен с тем, что фигурные скобки не являются необязательными и чисто необязательными и личными предпочтениями. – searchengine27

+1

Итак, ты говоришь, что это нормально ?! если (m [i] [j]> max) max = m [i] [j]; maxIndex1 = я; maxIndex2 = J; –

Смежные вопросы