2013-03-12 99 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; 
}