【问题标题】:Printing the max number from MathRandom generated numbers从数学随机生成的数字中打印最大数字
【发布时间】:2015-10-09 14:09:55
【问题描述】:

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

【问题讨论】:

  • 只要保持一个当前最大值并在生成更大的数字时更改它(将随机值存储在变量中,如果需要更新最大值,然后打印它)。

标签: java loops math for-loop random


【解决方案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 存储了迄今为止的最大值,通过计算maxxmaximum,我们还包括x

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

【讨论】:

  • 谢谢!我正在考虑在变量等中存储值......但不知道 Math.max 函数。也感谢您解释清楚。
【解决方案2】:

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

更准确地说,假设您计算了前 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 在迄今为止计算的那些中保持最大值”。考虑不变量有助于您设计算法。

【讨论】:

    猜你喜欢
    • 2021-03-18
    • 1970-01-01
    • 2015-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多