Странная проблема с реализацией max с циклом for

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

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

Где первое прочитанное значение - это int, и это количество удвоений, которое нужно ввести.

Это сложно, потому что я должен найти способ инициализировать 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 — количество следующих чисел.


person Mike    schedule 07.11.2010    source источник
comment
Должен сказать, это довольно странная домашняя задача. Из-за ограничений вы фактически не сможете использовать valMax где-либо после цикла (т.е. распечатать его), потому что он, возможно, не был инициализирован.   -  person Catchwa    schedule 08.11.2010
comment
Ну, проблема не в том, что ее нужно распечатать, а в том, что она должна сохранить максимальное значение в valMax. В примечании внизу задачи указано, как инициализируется valMax.   -  person Mike    schedule 08.11.2010
comment
+1 за использование тега домашнего задания (:D)   -  person jcolebrand    schedule 08.11.2010
comment
@Roger Page ~ /facepalm тогда. Спасибо за наводку.   -  person jcolebrand    schedule 08.11.2010
comment
Оказывается, профессор ошибся в задании. Это было предназначено для двойного значения, valMax = 0. lol   -  person Mike    schedule 11.11.2010


Ответы (2)


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

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

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

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

person sleske    schedule 07.11.2010
comment
я поставил дополнительный j++, потому что я использовал два значения в первом запуске. Как я уже сказал, это был мой метод проб и ошибок. (думаю, это была попытка №8) - person Mike; 08.11.2010
comment
Я прибегаю к методу проб и ошибок только тогда, когда мои книги, заметки, предыдущие знания и друзья терпят неудачу. - person Mike; 08.11.2010

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

valMax = Double.MIN_VALUE

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

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

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

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

person Jack    schedule 07.11.2010
comment
Нет, мы не можем выйти из любого существующего кода, только добавить код там, где есть .... - person Mike; 08.11.2010
comment
@John ~ Вы можете рассмотреть возможность проверки, если для valMax не установлено какое-либо значение, то что это может быть? Или, другими словами, может ли быть значение valMax, которое указывало бы на то, что оно не было инициализировано? Можете ли вы проверить, установлено ли в настоящее время это значение, и поэтому его необходимо инициализировать? [не думайте, что это невозможно, это действительно две простые строки кода, которые нужно вставить] - person jcolebrand; 08.11.2010
comment
Я понятия не имею. Я понятия не имею, почему он задал это и не рассказал об этом в классе. Я мог бы попытаться пойти к нему в рабочее время завтра. Я в тупике. - person Mike; 08.11.2010
comment
подсказка: if (valMax == null) {valMax = new double; valMax = 0;} (хорошо, это не идеально, но примерно так я бы проверил, не было ли присвоено значение. - person jcolebrand; 08.11.2010
comment
На самом деле вам не нужно Double.MIN_VALUE, в j==0 максимальное известное значение - это текущее число в value. - person Mark Elliot; 08.11.2010
comment
@John: Знание того, когда обратиться за помощью, является ключевым, и знание того, к кому обратиться за помощью, просто важно (этот тип вопросов действительно касается требований, а не программирования, и ваш профессор или ассистенты знают это лучше, чем вы можете объяснить их нам). Не забывайте, что вы платите за обучение за привилегию этих рабочих часов. - person ; 08.11.2010
comment
@drachenstern Я следовал тому, что вы предложили, за исключением того, что я получаю ошибку токена в двойном размере с ожидаемыми размерами после этого токена. Я понимаю, откуда вы, я пробовал null ранее, но мы не узнали о «новом двойнике». Если я не пропустил это где-то в книге... - person Mike; 08.11.2010
comment
в этом случае new должно означать выделение памяти для этой переменной как неинициализированной, но я только предполагаю, что Java допускает то же самое. Попробуйте new double(0). Тогда вам не понадобится второй оператор valMax = 0; - person jcolebrand; 08.11.2010
comment
Я попробовал это, я имею в виду, что код в целом все еще работает в моем исходном коде, за исключением случаев, когда я добавляю System.out.println(valMax) внизу после кода, я получаю сообщение об ошибке из-за того, что valMax, возможно, не был инициализирован. Это в основном потому, что если n будет = 0, то valMax не будет установлен, поэтому не будет инициализирован. Может быть, эта проблема - вопрос с подвохом. - person Mike; 08.11.2010
comment
Странно, в Java нет понятия неинициализированных констант. Если вы просто объявите double, он получит 0.0 в качестве значения по умолчанию. - person Jack; 08.11.2010