2016-11-25 39 views
1

我正在用Java編寫一個通用的蛇遊戲,我希望我的蘋果在隨機座標上被繪製。但是,當我將座標設置爲基於Math.random()時,兩個座標都會創建相同的Math.random結果。這意味着蘋果總是繪製在一條直線上。 (4,4)Math.random()生成相同的數字

//Draws apple 
public void drawApple(Graphics2D gfx) { 
    rectCoords(gfx, red, (int) Math.floor(Math.random()*20), (int) Math.floor(Math.random()*20)); 
} 
// rectCoords(graphics, color, xcoordinate, ycoordinate) 

我認爲,這是因爲他們使用他們的種子,同時值,因爲它們在同一時間調用。

我試過Math.random()Random對象,即使是兩者的組合。我試過在整個代碼中的不同時間將它們聲明爲變量,甚至在Thread.sleep();(儘管實際上讓它工作起來有些麻煩)拋出。

當然,我不是唯一一個試圖在同一時間生成兩個隨機數的人。我感謝任何看起來過去的人,或者指向類似的線索。謝謝!

編輯:我解決了它,這是另一段代碼的問題。雖然,不太確定如何關閉此線程或將其標記爲已解決...

+1

您確定*您正在運行的代碼與您在此發佈的代碼相同嗎? – Bohemian

+0

Math.random()給出一個大於0且小於1的double值,當你轉換爲整數時它將總是變爲0 – developer

+0

你得到的數字是什麼?它總是0嗎? – Jobin

回答

1

您將始終得到一個小於20的數字(因爲Math.random()會給出一個double值,該值是> = 0和< 1),所以不是可以使用nextInt()方法從java.util.Random,如下所示:

public void drawApple(Graphics2D gfx) { 
    Random random = new Random(); 
    rectCoords(gfx, red, random.nextInt(), random.nextInt()); 
} 

另外,還可以實際使用/通過使用重載方法nextInt(maxNumber)到最大限制設置爲隨機數maxNumber值random.nextInt(maxNumber)

+1

不正確,結果乘以20,它被提升爲'double'類型;全部被截斷爲'int' – Bathsheba

+1

那麼什麼?OP乘以'20',所以結果將是'0 <= x <20' – Bohemian

+1

是的,謝謝,我的意思是相同> = 0,更正 – developer