Странная проблема с реализацией max с циклом for - PullRequest
1 голос
/ 08 ноября 2010

Я провожу последний час в пробах и ошибках с этой проблемой безрезультатно. Мы должны, используя общие правила кодирования (например, scan.nextDouble) вместо реальных чисел, найти максимум определенного числа двойных значений. Единственный улов в том, что мы можем добавлять код только в определенный момент. (где ... это)

double value, valMax;
    int n;
    n = scan.nextInt();
    for(int j = 0; j < n; j++)
    {
       value = scan.nextDouble();
        ...
    }

Где первое прочитанное значение является целым числом, и это число двойных чисел, которое нужно ввести.

Это сложно, потому что мне нужно найти способ инициализации valMax внутри цикла, не путая ничего больше.

Это то, с чем я работал, но у меня ничего не получалось.

for(int j = 0; j < n; j++)
   {
      value = scan.nextDouble();
      if(j == 0)
      {
       valMax = scan.nextDouble();
       j++;
      }
      else
      {
       continue;
      }
      if(value >= valMax)
      {
       valMax = value;
      }
   }

Пример ввода:

5    -4.7  -9.2  -3.1  -8.6  -5.0

Где -3.1 - максимум, а 5 - число следующих чисел.

Ответы [ 2 ]

1 голос
/ 08 ноября 2010

Ваш код кажется хорошим началом.

Чтобы решить вашу проблему, подумайте:

  • Почему вы положили в j++? Вам это действительно нужно? (Подсказка: нет ;-))
  • Что будет делать цикл для j>0 (т.е. после первой итерации)?

Это должно быстро дать вам рабочее решение.

0 голосов
/ 08 ноября 2010

Вам разрешено устанавливать valMax перед циклом? Потому что в этом случае вы можете просто сделать

valMax = Double.MIN_VALUE

и просто забудьте о странных вещах, выполнив обычное сравнение value > valMax.

Если вы не ваш подход, то как вы должны делать, но две вещи:

  • вы не должны заботиться о приращении с j++, поскольку цикл for позаботится об этом сам по себе ..
  • с else { continue; } заставит тело for перейти к следующей итерации, не заботясь о коде после продолжения. Вы уверены, что это то, что вы хотите сделать?

Я думаю, что вы можете инициализировать Double.MIN_VALUE на первой итерации (j == 0) и просто вести себя нормально после этого: единственное, что вам нужно, это то, что valMax инициализируется до первого сравнения со значением, а не до сканирования из стандартного.

...