2013-11-22 37 views
-2

所以我有一個700x700的屏幕,我想創建一個對象(小行星)從屏幕左側移動到右側。一旦它脫離屏幕,我希望它隨機產生回來,並做同樣的事情。 到目前爲止,我已經創建了一個對象,它隨機產生一個Y,然後向右移動,但是,在0:100像素和600:700像素之間,我有對象,我不希望我的對象產卵並穿過那些對象。我想隨機Y中假設101和599Java Math.random()考慮

if (centerX > width + 200) { 
       isTravelling = false; 
       centerX = -200; 
       centerY = (int)(Math.random()); 
      } 
+1

'Math.random()'在範圍'[0.0,1.0)''中返回一個正數'double'。可能要仔細檢查你的數學。請參閱http://docs.oracle.com/javase/7/docs/api/java/lang/Math.html。 – Bucket

回答

5

嘗試

import java.util.Random; 

public class YourClass { 
    Random rnd = new Random(); 
    // insert variable declarations here... 

    public void yourMethod() { 
     if (centerX > width + 200) { 
      isTravelling = false; 
      centerX = -200; 
      centerY = rnd.nextInt(499) + 101; 
     } 
    } 
} 
+3

每次需要隨機整數時創建一個新的隨機對象是一種不好的做法,相反,創建一個隨機對象並重用它。 – dimo414

+0

我同意並將修復我的示例 – ljgw

+0

我決定,我希望我的最大Y是450,我的最小Y是100,但它仍然不起作用。 – MrSilent

1

Math.floor(Math.random() * 499 + 101)之間,你在找什麼

+0

這是不明智的,因爲它不能正確地生成從最小到最大的均勻隨機值。 – dimo414

1

你可以做到以下幾點:

min + ((int) (Math.random() * (max - min + 1)) 

Math.random()在[0,1)範圍內生成一個double值(即包括0和不包括1)。

+1

這是不明智的,因爲它不能正確地生成從最小到最大的均勻隨機值。 – dimo414

+0

我剛剛發現[這個解釋](http://stackoverflow.com/questions/738629/math-random-versus-random-nextintint)。我不知道區別。感謝分享知識:-) –

1

Math.random()在[0-1)範圍內返回一個雙精度數,這不是你想要的。

您可以創建一個new Random()對象,並調用其nextInt(max)方法以獲得0到max之間的一致隨機數(不包括最大值)。

private final int MAX = 600; 
private final int MIN = 101; 
private Random rnd = new Random(); 

public void doStuff() { 
    // before 
    if (centerX > width + 200) { 
    isTravelling = false; 
    centerX = -200; 
    centerY = rnd.nextInt(MAX-MIN+1)+MIN; 
    } 
    // after 
}