使用带有静态变量的随机getter

时间:2017-04-24 21:36:12

标签: java object static getter

所以我使用一些随机数发生器为我的口袋妖怪生成统计数据。我的口袋妖怪构造函数是:

public Pokemon(String name, int health, int attack, int speed, boolean status) {

    this.name = name;
    Pokemon.health = health;
    Pokemon.attack = attack;
    Pokemon.speed = speed;
    Pokemon.status = status;
}

 private static int randomHealth(int min, int max) {
    int range = (max - min) + 1;
    return (int)(Math.random() * range) + min;
}
private static int randomAttack(int min, int max) {
    int range = (max - min) + 1;
    return (int)(Math.random() * range) + min;
}
private static int randomSpeed(int min, int max) {
    int range = (max - min) + 1;
    return (int)(Math.random() * range) + min;
}

我的随机发生器:

private Random rand = new Random();
private List<Pokemon> pokemon;


WildPokemon(){
    pokemon = new ArrayList();

    Pokemon rattata = new Pokemon("Rattata",randomHealth(15,20),randomAttack(2,5),randomSpeed(3,6), true);
    pokemonZone1.add(rattata);
    Pokemon pidgey = new Pokemon("Pidgey",randomHealth(10,17),randomAttack(3,4),randomSpeed(2,5), true);
    pokemonZone1.add(pidgey);

吸气者:

Pokemon getRandomPokemon() {
    int n = rand.nextInt(pokemon.size());
    return pokemon.get(n);
}

然而,我面临的问题是当使用我的战斗方法从列表中选择随机宠物小精灵时(为简洁起见省略),为随机宠物小精灵生成的统计数据总是从最近构建的神奇宝贝中拉出来(在这种情况下是Pidgey)。

例如,我只是为随机口袋妖怪提取统计数据并为Rattata获得以下内容:

健康:14

攻击:3

速度:2

如果我的隐含逻辑是正确的,那么Rattata将无法获得那么低的健康或速度。

我觉得好像问题在于使用&#34;静态&#34;变量,因为我还没有完全理解它们。可能是在运行我的getRandomPokemon()方法时,它会拉出这些值的最后已知最小值和最大值。在这种情况下,是Pidgey的。

battle(starter, wildPokemon.getRandomPokemon());

我为这个混乱的例子道歉,但我发现这是我学得最好的方式。谢谢!

更新:

感谢大家的帮助。我设法通过将变量从静态更改为非静态来解决问题,并且通常只是清理代码。     公共课口袋妖怪{

public static int starterHealth;
String name;
public int health;
public int attack;
public int speed;
public boolean status;

我还让Battle自己的类拥有自己的方法并清理代码。 总的来说,我了解到如果我将Pokemon类中的变量设为静态,它会为所有Pokemon提供相同的统计数据。理解静态变量花了很多工作,但我最终得到了它。

谢谢大家!

1 个答案:

答案 0 :(得分:1)

你是对的。这是你的静态变量。

静态变量只存在一次完全停止(每个神奇宝贝不是一次)。因此,你的所有神奇宝贝都采用了最后一个的值,在这种情况下是Pidgey。

很简单,你的变量不应该是静态的。