Java 变量超出范围

Java 变量超出范围,java,bluej,Java,Bluej,我有一个错误,第61行指出变量firstbattlerealactualhealth超出了使用范围。我试过各种各样的方法,但似乎都没能奏效 如果你能告诉我出了什么问题,我需要什么来解决它,我将不胜感激 编辑:更改了哪个变量和行有问题,因为我无法计数或读取 boolean firstbattle = true; while (firstbattle) { int firstbattlehealth = HP; int firstbattleattack = Attack;

我有一个错误,第61行指出变量
firstbattlerealactualhealth
超出了使用范围。我试过各种各样的方法,但似乎都没能奏效

如果你能告诉我出了什么问题,我需要什么来解决它,我将不胜感激

编辑:更改了哪个变量和行有问题,因为我无法计数或读取

boolean firstbattle = true;
while (firstbattle) {
    int firstbattlehealth = HP;
    int firstbattleattack = Attack;
    int firstbattledefense = Defense;
    int firstbattleMP = MP;
    int firstbattleEXP = EXP;
    int firstbattlegold = Gold;

    int firstattack = (int) Math.ceil(Math.random() * 6);
    int firstdefense = (int) Math.ceil(Math.random() * 6);

    int firstenemyattack = (int) Math.ceil(Math.random() * 6);
    int firstenemydefense = (int) Math.ceil(Math.random() * 6);

    int firstenemyhealth = firstenemyfirsthealth;

    int firstenemynewhealth = firstenemyfirsthealth;

    int firstenemyhitpoints = (int) Math.ceil(Math.random() * 25);

    int firsthitpoints = 0;
    boolean firstkill = true;
    while (firstkill) {
        if (firstattack > firstenemydefense) {
            firsthitpoints = (int) Math.ceil(Math.random() * firstbattleattack);
            System.out.println();
            System.out.println("You did " + firsthitpoints + " damge to the Slime.");           
        }

        firstenemynewhealth = firstenemyhealth - firsthitpoints;

        if (firstenemynewhealth <= 0) {
           firstkill = false;
        }

        if (firstattack <= firstenemydefense) {
            System.out.println();
            System.out.println("Attack failed!");
        }
        int firstbattleactualhealth = firstbattlehealth;
        if (firstenemyattack > firstdefense) {
            int firstenemyhitpointattack = (int) Math.ceil(Math.random() * firstenemyhitpoints);
            int firstbattlerealactualhealth = firstbattleactualhealth - firstenemyhitpointattack;
            System.out.println();
            System.out.println("The enemy did " + firstenemyhitpointattack + " damage to you. You have " + firstbattlerealactualhealth + " health remaining.");
        }

        if (firstenemyattack <= firstdefense ) {
            System.out.println();
            System.out.println("Enemy attack missed!");
        }
    }

    int firstenemyactualhealth = firstenemynewhealth;
    if (firstenemyactualhealth <= 0){
        System.out.println();
        System.out.println("You won the battle!");

        HP = firstbattlerealactualhealth;
        EXP =  firstbattleEXP + 20;
        Gold = firstbattlegold + 20;
        System.out.println();
        System.out.println("You have " + HP + " health.");
        System.out.println("You have earned" + EXP + " experience.");
        System.out.println("You have earned" + Gold + " gold.");

        firstbattle = false;
    }
}
boolean firstbattle=true;
while(第一战){
int firstbattlehealth=HP;
攻击=攻击;
防御=防御;
int=MP;
int firstbattleEXP=EXP;
黄金=黄金;
int firstattack=(int)Math.ceil(Math.random()*6);
int firstdefense=(int)Math.ceil(Math.random()*6);
int firstenemyattack=(int)Math.ceil(Math.random()*6);
int firstenemydefence=(int)Math.ceil(Math.random()*6);
int firstenemyhealth=firstenemyfirsthealth;
int firstenemynewhealth=firstenemyfirsthealth;
int firstenemyhitpoints=(int)Math.ceil(Math.random()*25);
int firsthitpoints=0;
布尔值firstkill=true;
while(firstkill){
如果(第一次攻击>第一次防御){
firsthitpoints=(int)Math.ceil(Math.random()*firstbattleattack);
System.out.println();
System.out.println(“你做到了”+第一次生命值+“粘液筑坝”);
}
firstenemynewhealth=firstenemyhealth-firsthitpoints;

if(firstenemynewhealth这可能是因为
firstbattlerealrealhealth
是在
if
子句中定义的。如果程序不执行该
if
块,
firstbattlerealrealhealth
将不会被定义。您必须在确信它将被执行的地方定义并初始化它

底线是,如果在块(
{}
)内定义变量,则只能在该块内使用,而不能在其他地方使用

小贴士:


不要将任何变量命名为
first\u sth
。它后面必然是名为
second\u sth
third\u sth
的变量,您将无法管理它们。您应该通过传递不同的参数,将相同的逻辑重新用于其他战斗(不仅仅是slimes),这样您就可以直接编写(不要重复)代码。变量名也很可读。

firstenemyfirsthealth
从哪里来?对不起,伙计们,我找的东西搞砸了。实际上是第61行,变量“firstbattlerealactualhealth”,它应该等于变量“HP”。它首先出现在第44行,在那里它等于被怪物夺走的生命值。因此错误发生在
HP=firstbattlerealreallhealth;
?如果是这样的话,也许你应该在你的问题中写出来。对不起,我不知道。谢谢。这可能是我今天第三次这样做了,我会记住这一点。