从MathRandom生成的数字打印最大数量

时间:2015-10-09 14:09:56

标签: java loops math for-loop random

我的任务是使用循环在0和1之间打印1,000,000个随机数。

我选择使用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());
        }       
    }   
}

2 个答案:

答案 0 :(得分: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存储了迄今为止的最大值,通过计算maxx的{​​{3}},我们包括{{1}同样。

最后在x循环之后,我们确定for包含遇到的最大值,我们可以打印它(或用它做其他事情)。

答案 1 :(得分:1)

问自己问题&#34;我可以动态计算最大值吗?&#34;,即使用一些归纳规则而不存储数字。

更确切地说,假设您计算了N个第一个数字的最大值。如果你计算下一个数字,你能先获得N + 1的最大值吗?

答案是显而易见的,因为&#34; N + 1个第一个数字的最大值是第N + 1个数字中的最大数字和N个第一个数字中的最大数字&#34;。换句话说,如果新数字大于目前为止的最大值,则取代它。

另请注意&#34;最大值&#34;第一个数字是那个数字。

因此,在伪代码中,

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

您可以根据规则使用稍微简单的变体&#34;无数字的最大值通常是最小的可能值&#34;,此处为0.

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

这种思维方式在编程中引入了一个重要的概念:循环不变量。在整个循环的执行过程中,保持以下条件:&#34;变量Maximum保持迄今为止已计算的最大值&#34;。根据不变量进行思考可以帮助您设计算法。