2015-10-09 23 views
0

我的任务是使用循环打印0到1之间的1,000,000个随机数。从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,所以我们首先设置max0.0d

接下来我们遍历1000000样本。在打印该值之前,我们首先将其存储在double x中。接下来我们更新最大值:max迄今为止保存了最大值,通过计算的maxx,我们也包括了x

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

+0

谢谢!我正在考虑将值存储在变量等内......但不知道数学。最大功能。也谢谢你清楚地解释它。 – 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保持迄今为止计算出的最大值”。根据不变量进行思考有助于您设计算法。

相关问题