所以我使用一些随机器为我的口袋妖怪生成统计信息。我的宠物小精灵的构造是:使用具有静态变量的随机化吸气剂
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不会有健康或速度那么低。
我感觉好像问题在于使用“静态”变量,因为我还没有完全理解它们。这可能是在运行我的getRandomPokemon()方法时,它会为这些值抽取最后已知的最小值和最大值。在这种情况下是Pidgey的。
battle(starter, wildPokemon.getRandomPokemon());
我为混沌的例子道歉,但我发现这是我学习最好的方式。谢谢!
UPDATE:
感谢大家的帮助。我设法通过将我的变量从静态变为非静态来解决问题,并且通常只是清理代码。 公共类口袋妖怪{
public static int starterHealth;
String name;
public int health;
public int attack;
public int speed;
public boolean status;
我还做了战斗它自己的类来保存自己的方法和清理的代码。总体而言,我了解到,如果我将口袋妖怪类中的变量设为静态,它会为所有口袋妖怪提供相同的统计信息。理解静态变量花了很多工作,但我最终得到了它。
谢谢大家!
这里没有足够的能够理解你的bug。如果我是对的,在构造函数中,'Pokemon.health = health'等应该是'this.health = health',并且(如果这些是静态成员),health变量应该是非静态成员变量。 – Justin
对不起,我接受了一个IntelliJ的建议。我是这样的。name = name,但显然它的工作方式是相同的。 – Sean
是的,这是因为你(很明显)在你的'Pokemon'类中使用静态变量。不要这样做。 [阅读静态与实例变量。](https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html)(并且不,它与'this'不一样)。 – markspace