有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    您有两个EnemyHP变量。一个是main方法的本地,您永远不会更新它,因此循环永远不会结束;另一个是Formulas类中的本地,您会更新它

    循环应该从f获取当前值

    改变

    while (EnemyHP != 0)
    

    while (f.getThunder () >= 0) // you have multiple methods that return the EnemyHP member
                                 // but it would make more sense to have a getEnemyHP method
    

    您还应该初始化Formulas类的EnemyHP成员。否则默认为0

    您可以将其传递给构造函数:

    Formulas f = new Formulas(100);
    
    ...
    
    class Formulas extends SkillValues{
        ...
        public Formulas (int EnemyHP) {
            this.EnemyHP = EnemyHP;
        }
    
        ...
    }