使用具有静态变量的随机Getter



因此,我正在使用一些Randomizer为口袋妖怪生成统计数据。我的口袋妖怪构造函数是:

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);

getter:

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

但是,我面临的问题是,当我的战斗方法从列表中选择随机的口袋妖怪(省略为简洁(时,为随机口袋妖怪生成的统计信息始终从最近构造的Pokemon(Pidgey(中获取在这种情况下(。

例如,我只是为随机的口袋妖怪拉了统计数据,并获得了rattata的以下内容:

健康:14

攻击:3

速度:2

如果我的暗示逻辑是正确的,那么rattata将无法保持低较低的健康或速度。

我觉得这个问题在于使用"静态"变量,因为我还不完全理解它们。可能是在运行我的getrandompokemon((方法时,它会为这些值拉动最后已知的最小值和最大值。在这种情况下是Pidgey的。

battle(starter, wildPokemon.getRandomPokemon());

我为混乱的例子表示歉意,但我发现这是我学习最好的方式。谢谢!


更新:

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

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

我还做了自己的班级,以保持自己的方法并清理代码。总体而言,我了解到,如果我在口袋妖怪类静态中进行变量,则可以为所有口袋妖怪提供相同的统计数据。要了解静态变量,这花费了很多工作,但是我最终得到了。

谢谢大家!

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

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

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

最新更新