java简单口袋妖怪之战
你好。我的代码中敌人的生命值没有降低到0,但我只是不断增加我所选择的每次攻击的伤害,并显示类似的内容(皮卡丘使用雷霆!敌人生命:-120)。我是Java新手,在识别问题时遇到了困难。如果有人能帮助我,请和谢谢你
import java.io.*;
public class Pokemon extends Formulas
{
public static void main (String [] args) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Formulas f = new Formulas();
String opt, ans;
int EnemyHP = 100;
do
{
System.out.println("What will Pikachu do? \nA) Thundershock \nB) Quick Attack \nC) Thundershock \nD) Thunder");
opt = br.readLine();
switch(opt)
{
case "a": case "A":
f.setThundershock();
System.out.println("Pikachu uses Thundershock! Enemy Life:"+f.getThundershock());
break;
case "b": case "B":
f.setQuickAttack();
System.out.println("Pikachu uses Quick Attack! Enemy Life:"+f.getQuickAttack());
break;
case "c": case "C":
f.setThunderbolt();
System.out.println("Pikachu uses Thunderbolt! Enemy Life:"+f.getThunderbolt());
break;
case "d": case "D":
f.setThunder();
System.out.println("Pikachu uses Thunder! Enemy Life:"+f.getThunder());
break;
default:
System.out.println("Invalid input.");
}
}
while (EnemyHP != 0);
}
}
下面是公式类:
class Formulas extends SkillValues{
private int Thundershock, QuickAttack, Thunderbolt, Thunder, Damage, EnemyHP;
SkillValues s = new SkillValues();
public void setThundershock()
{
this.Damage = s.valueThundershock();
EnemyHP -= Damage;
}
public void setQuickAttack()
{
this.Damage = s.valueQuickAttack();
EnemyHP -= Damage;
}
public void setThunderbolt()
{
this.Damage = s.valueThunderbolt();
EnemyHP -= Damage;
}
public void setThunder()
{
this.Damage = s.valueThunder();
EnemyHP -= Damage;
}
public int getThundershock()
{
return EnemyHP;
}
public int getQuickAttack()
{
return EnemyHP;
}
public int getThunderbolt()
{
return EnemyHP;
}
public int getThunder()
{
return EnemyHP;
}
}
最后是技能价值:
public class SkillValues
{
public int valueThundershock()
{
return 15;
}
public int valueQuickAttack()
{
return 10;
}
public int valueThunderbolt()
{
return 15;
}
public int valueThunder()
{
return 40;
}
}
# 1 楼答案
您有两个
EnemyHP
变量。一个是main
方法的本地,您永远不会更新它,因此循环永远不会结束;另一个是Formulas
类中的本地,您会更新它循环应该从
f
获取当前值改变
到
您还应该初始化
Formulas
类的EnemyHP
成员。否则默认为0您可以将其传递给构造函数: