2015-10-09 61 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保持迄今爲止計算出的最大值」。根據不變量進行思考有助於您設計算法。

相關問題