我的任务是使用循环在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());
}
}
}
答案 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
存储了迄今为止的最大值,通过计算max
和x
的{{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;。根据不变量进行思考可以帮助您设计算法。