Java 变量超出范围
我有一个错误,第61行指出变量Java 变量超出范围,java,bluej,Java,Bluej,我有一个错误,第61行指出变量firstbattlerealactualhealth超出了使用范围。我试过各种各样的方法,但似乎都没能奏效 如果你能告诉我出了什么问题,我需要什么来解决它,我将不胜感激 编辑:更改了哪个变量和行有问题,因为我无法计数或读取 boolean firstbattle = true; while (firstbattle) { int firstbattlehealth = HP; int firstbattleattack = Attack;
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;
?如果是这样的话,也许你应该在你的问题中写出来。对不起,我不知道。谢谢。这可能是我今天第三次这样做了,我会记住这一点。