2015-10-09 2 views
0

Моя задача - напечатать 1 000 000 случайных чисел от 0 до 1 с использованием петель.Печать максимального числа из сгенерированных чисел MathRandom

Я решил использовать функцию Math.random для этого и цикл for для создания 1 000 000.

Теперь мне нужно напечатать максимальное значение чисел ... но как? Можно ли это сделать, помещая их в массив?

Вот мой код до сих пор:

public class GenerateRandomNumbers  
{  
public static void main(String[]args) 
    { 
     for(int i=0; i < 1000000; i++){ 
     System.out.println(Math.random()); 
     }  
    } 
} 
+4

Просто сохраняйте текущий максимум и изменяйте его, когда вы создаете большее число (храните случайное значение в переменной, при необходимости обновляйте максимум и печатайте его). – Cinnam

ответ

1

Вам просто нужно следить за текущим максимумом, и обновлять его соответствующим образом:

public static void main(String[]args) { 
    double max = 0.0d; 
    for(int i=0; i < 1000000; i++){ 
     double x = Math.random(); 
     max = Math.max(max,x); 
     System.out.println(x); 
    } 
    System.out.println("The maximum is "+max); 
} 

Код работает следующим образом: от спецификаций Math.random, мы знали, что самое низкое значение 0.0, поэтому мы сначала установили max в 0.0d.

Далее мы перебираем образцы 1000000. Перед печатью значения мы сначала сохраним его в double x. Затем мы обновили максимум: max сохранили максимум, вычислив maximum от max и x, включая x.

Наконец, после цикла for мы точно знаем, что max содержит максимальное значение, и мы можем его распечатать (или делать с ним другие вещи).

+0

Спасибо! Я думал о сохранении значений внутри переменных и т. Д., Но не знал о математике.max. Также спасибо за его разъяснение. – AnthonyJ

1

Задайте себе вопрос «могу ли я вычислить максимум на лету?», Т. Е. Используя какое-то правило индукции, не сохраняя числа.

Точнее, предположим, что вы вычислили максимум N первых чисел. Если вы вычислите следующий номер, вы можете сначала получить максимум N + 1?

Ответ очевиден да, так как «максимальное число N + 1 первых чисел является наибольшим из N + 1-го числа и максимумом N первых чисел». Другими словами, если новое число больше максимального до сих пор, оно заменяет его.

Также обратите внимание, что «максимум» первого номера - это число.

Следовательно, в псевдокоде,

Maximum= Random() 
for i in range(1, 1000000): 
    R= Random() 
    if R > Maximum: 
     Maximum= R 

Вы можете использовать несколько более простой вариант, основанный на правиле «максимум без номера обычно наименьшее возможное значение», здесь 0.

Maximum= 0 
for i in range(0, 1000000): 
    R= Random() 
    if R > Maximum: 
     Maximum= R 

Этот способ мышления представляет важную концепцию программирования: инвариант цикла. Во время выполнения цикла сохраняется следующее условие: «переменная Maximum содержит наибольшее значение среди тех, которые были вычислены до сих пор». Мышление с точки зрения инвариантов помогает вам в разработке алгоритмов.

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