2016-01-11 193 views
3

新手的問題在這裏: 我嘗試使用此代碼創建一個隨機數Java的隨機數

int rand = (int) Math.random()*10; 

然而,打印到屏幕

時,我一直在接受0作爲答案

只把括號像這樣後

int rand = (int)(Math.random()*10); 

是否正確顯示數字。 任何人都可以解釋我錯過了這個邏輯原因嗎?

回答

3

代碼

int rand = (int) Math.random()*10; 

相當於

int rand = ((int) Math.random()) * 10; 

因此Math.random()的值被轉換爲int。因爲該值介於0和1之間(1除外)轉換爲總是爲零

所以

(int) Math.random()*10 --> ((int) Math.random()) * 10 --> 0 * 10 --> 0 
3

Math.random()返回一個double 0到1之間的數字,這意味着(int)Math.random()將始終爲0(因爲Math.random() < 1)。爲了在轉換爲int之前執行乘法運算,您必須像使用括號一樣使用括號。

5

當你寫int rand = (int) Math.random()*10,你實際上寫:

int rand = ((int) Math.random()) * 10; 

所以你得到0,因爲隨機數是0和1之間,並轉換成一int使得它等於0。

2

其他的答案已經在你的代碼解釋這個問題,所以我不會在這裏介紹這個話題了。

這是剛上一代隨機數字的便條:
在java中產生隨機數的推薦的方法是不Math.random(),而是通過java.util.Random類(http://docs.oracle.com/javase/7/docs/api/java/util/Random.html)。

要生成一個隨機數字,如在上面的例子中,你可以使用此代碼:

Random rnd = new Random(); 
int i = rnd.nextInt(10); 

,這將產生相同的結果你的代碼。

0
int rand = (int) Math.random()*10; 

相當於

int rand = ((int) Math.random())*10; 

考慮到數學。隨機的()0 < = N < 1返回一個數字,如果您嘗試施放它,你總是會得到0,即乘以10還是0

int rand = ((int) Math.random()); -- ALWAYS --> ZERO 

0*N ---- ALWAYS ---> ZERO