新手的問題在這裏: 我嘗試使用此代碼創建一個隨機數Java的隨機數
int rand = (int) Math.random()*10;
然而,打印到屏幕
時,我一直在接受0作爲答案只把括號像這樣後
int rand = (int)(Math.random()*10);
是否正確顯示數字。 任何人都可以解釋我錯過了這個邏輯原因嗎?
新手的問題在這裏: 我嘗試使用此代碼創建一個隨機數Java的隨機數
int rand = (int) Math.random()*10;
然而,打印到屏幕
時,我一直在接受0作爲答案只把括號像這樣後
int rand = (int)(Math.random()*10);
是否正確顯示數字。 任何人都可以解釋我錯過了這個邏輯原因嗎?
代碼
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
Math.random()
返回一個double
0到1之間的數字,這意味着(int)Math.random()
將始終爲0(因爲Math.random() < 1
)。爲了在轉換爲int之前執行乘法運算,您必須像使用括號一樣使用括號。
當你寫int rand = (int) Math.random()*10
,你實際上寫:
int rand = ((int) Math.random()) * 10;
所以你得到0,因爲隨機數是0和1之間,並轉換成一int
使得它等於0。
其他的答案已經在你的代碼解釋這個問題,所以我不會在這裏介紹這個話題了。
這是剛上一代隨機數字的便條:
在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);
,這將產生相同的結果你的代碼。
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