所以我使用一些隨機器爲我的口袋妖怪生成統計信息。我的寵物小精靈的構造是:使用具有靜態變量的隨機化吸氣劑
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