繁体   English   中英

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

[英]Printing the max number from MathRandom generated numbers

我的任务是使用循环在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());
        }       
    }   
}

您只需要跟踪当前的最大值,并进行相应的更新即可:

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 max存储到目前为止的最大值 ,我们也包括x

最后,在for循环之后,我们肯定知道max包含遇到的最大值,并且我们可以打印它(或使用它做其他事情)。

问问自己一个问题“我可以即时计算最大值吗?”,即使用一些归纳规则而不存储数字。

更准确地说,假设您计算了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保持到目前为止已计算出的最大值中的最大值”。 关于不变性的思考可以帮助您设计算法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM