【问题标题】:Variable out of Range变量超出范围
【发布时间】:2016-04-30 11:14:51
【问题描述】:

我有一个错误,第 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;
    }
}

【问题讨论】:

  • firstenemyfirsthealth 来自哪里?
  • 对不起,伙计们,我搞砸了我要找的东西。它实际上是第 61 行,变量“firstbattlerealactualhealth”,它应该等于变量“HP”。它首先出现在第 44 行,它等于被怪物带走的生命值。
  • 所以HP = firstbattlerealactualhealth;出现错误?如果是这样的话,也许你应该在你的问题中写出来
  • 对不起,我不知道。

标签: java bluej


【解决方案1】:

这可能是因为firstbattlerealactualhealth 是在if 子句中定义的。如果程序不执行if 块,firstbattlerealactualhealth 将不会被定义。你必须在你确定它会被执行的地方定义和初始化它。

归根结底,如果您在块内定义变量 ({}),则它应该在该块内使用,而不能在其他任何地方使用。

提示:

不要命名任何变量first_sth。它后面必然跟着名称为second_sththird_sth 的变量,您将无法管理它们。您应该通过传递不同的参数将相同的逻辑用于其他战斗(不仅是史莱姆),这样您就可以编写 DRY(不要重复自己)代码。变量名也将更易读。

【讨论】:

  • 谢谢。这可能是我今天第三次这样做了,我会记住这一点。
猜你喜欢
  • 1970-01-01
  • 2016-03-05
  • 1970-01-01
  • 1970-01-01
  • 2021-10-04
  • 2020-12-24
  • 2013-10-26
  • 2016-01-09
  • 2018-09-19
相关资源
最近更新 更多