2013-03-12 111 views
2

我正在BlueJ的Java程序中工作,我正在使用僞隨機生成器來生成最大數和最小數之間的隨機數。我沒有得到任何語法錯誤,但是當我調用方法時,它說它是空的。有人有什麼主意嗎?我已經導入了Random類,它在構造函數中被稱爲randomizer。隨機發生器返回null

public void attackEnemy() 
{ 
    int damage = 0; 
    int max = 41; 
    int min = 20; 
    damage = randomizer.nextInt(max - min) + min; 
    health = health - damage; 
} 
+2

是'randomizer' initialized?如果不是,你需要初始化它Random Randomizer = new Random()' – PermGenError 2013-03-12 14:39:28

+0

* randomizer *是如何聲明的? – sp00m 2013-03-12 14:40:20

+0

你能發表隨機發生器的代碼嗎? – SteveP 2013-03-12 14:40:26

回答

3

你這樣做了嗎?

randomizer = new Random(); 

,可以是null中示出的片段的唯一值是randomizer對象。你應該在正在使用的類的其他地方實例化它。

+0

是的,在構造函數中。 randomizer = new Random(); 而且我也導入它。 import java.util.Random; – 2013-03-12 14:42:17

+0

哦,對不起,我有兩個構造函數。一個用於快速創建玩家而不用任何參數,我忘了在另一箇中初始化它。案件結案,對不起傢伙,愚蠢的問題。只是忘了整個構造函數的事情。 :) – 2013-03-12 14:44:21

+0

@JoakimVindenes好的,很高興在這裏!請不要忘記通過點擊左邊的複選標記來接受最好的答案;) – 2013-03-12 14:45:02

2

初始化您randomizer這樣的: -

randomizer = new Random(); // Without this, it'll throw a NPE 
0

您需要指出隨機是逸岸隨機。它看起來像你的原始代碼,你沒有完成計算。看看下面:

public void attackEnemy(){ 

int max = 41; 
int min = 20; 
Random randomizer = new Random(); 

int damage = min + (max - min) * randomizer.nextInt(); 
health = health - damage; 
} 

我也認爲原因您收到一個空的輸出,是因爲你不返回任何東西。因此,您還可以將其顯示爲以下內容:

public int attackEnemy(){ 

int max = 41; 
int min = 20; 
Random randomizer = new Random(); 

int damage = min + (max - min) * randomizer.nextInt(); 
health = health - damage; 

return health; 
}