BlueJ 找不到变量
BlueJ cannot find a variable
我正在尝试设置第一场战斗,但在第 24 行,BlueJ 告诉我变量 firsthitpoints
不可见,无法执行。
如果有人能告诉我这段代码有什么问题,我将不胜感激
if (characterquality == "Slayer"){
int HP = 150;
int Attack = 75;
int Defense = 50;
int MP = 20;
int EXP = 0;
int Gold = 50;
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 = (int) Math.ceil(Math.random() * 50);
int firstenemyhitpoints = (int) Math.ceil(Math.random() * 25);
boolean firstkill = true;
while (firstkill) {
if (firstattack > firstenemydefense){
int firsthitpoints = (int) Math.ceil(Math.random() * firstbattleattack);
}
int firstenemynewhealth = firstenemyhealth - firsthitpoints;
if (firstenemynewhealth <= 0){
firstkill = false;
}
if (firstattack <= firstenemydefense){
System.out.println("Attack failed!");
}
if (firstenemyattack > firstdefense){
int firstenemyhitpointattack = (int) Math.ceil(Math.random() * firstenemyhitpoints);
System.out.println("The enemy did " + firstenemyhitpointattack + " damage to you. You have " + firstbattlehealth + " health remaining.");
}
if (firstenemyattack <= firstdefense){
System.out.println("Enemy attack missed!");
}
}
int firstenemynewhealth = firstenemynewhealth;
if (firstenemynewhealth <= 0){
firstbattle = false;
}
}
}
尝试创建一个局部变量 firsthitpoints
并像这样初始化它:
int firsthitpoints = 0;
while (firstkill) {
if (firstattack > firstenemydefense){
firsthitpoints = (int) Math.ceil(Math.random() * firstbattleattack);
您正在前面的 if
块中定义变量,将其移出块并为其赋予初始值。像,
boolean firstkill = true;
int firsthitpoints = 0; // <-- declare and initialize.
while (firstkill) {
if (firstattack > firstenemydefense){
firsthitpoints = Math.ceil(Math.random() * firstbattleattack);
}
int firstenemynewhealth = firstenemyhealth - firsthitpoints;
// ...
也,并没有直接针对你的问题,请不要比较String
等于 ==
.
if (characterquality == "Slayer"){
应该是
if (characterquality.equals("Slayer")) {
也许它适用于您的情况,但这只是测试引用相等性(而不是值相等性)。另见,How do I compare strings in Java?
最后,执行比较指令需要成本1。您应该使用 else
块,而不是将逻辑反转与多个 if
(s) 进行比较。像,
if (firstenemyattack > firstdefense) {
int firstenemyhitpointattack = (int) Math.ceil(Math.random()
* firstenemyhitpoints);
// Presumably, firstbattlehealth -= firstenemyhitpointattack here?
System.out.println("The enemy did " + firstenemyhitpointattack
+ " damage to you. You have " + firstbattlehealth
+ " health remaining.");
} else { // <-- An "else" block, firstenemyattack <= firstdefense
System.out.println("Enemy attack missed!");
}
1尽管在现代语境中很小。
我正在尝试设置第一场战斗,但在第 24 行,BlueJ 告诉我变量 firsthitpoints
不可见,无法执行。
如果有人能告诉我这段代码有什么问题,我将不胜感激
if (characterquality == "Slayer"){
int HP = 150;
int Attack = 75;
int Defense = 50;
int MP = 20;
int EXP = 0;
int Gold = 50;
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 = (int) Math.ceil(Math.random() * 50);
int firstenemyhitpoints = (int) Math.ceil(Math.random() * 25);
boolean firstkill = true;
while (firstkill) {
if (firstattack > firstenemydefense){
int firsthitpoints = (int) Math.ceil(Math.random() * firstbattleattack);
}
int firstenemynewhealth = firstenemyhealth - firsthitpoints;
if (firstenemynewhealth <= 0){
firstkill = false;
}
if (firstattack <= firstenemydefense){
System.out.println("Attack failed!");
}
if (firstenemyattack > firstdefense){
int firstenemyhitpointattack = (int) Math.ceil(Math.random() * firstenemyhitpoints);
System.out.println("The enemy did " + firstenemyhitpointattack + " damage to you. You have " + firstbattlehealth + " health remaining.");
}
if (firstenemyattack <= firstdefense){
System.out.println("Enemy attack missed!");
}
}
int firstenemynewhealth = firstenemynewhealth;
if (firstenemynewhealth <= 0){
firstbattle = false;
}
}
}
尝试创建一个局部变量 firsthitpoints
并像这样初始化它:
int firsthitpoints = 0;
while (firstkill) {
if (firstattack > firstenemydefense){
firsthitpoints = (int) Math.ceil(Math.random() * firstbattleattack);
您正在前面的 if
块中定义变量,将其移出块并为其赋予初始值。像,
boolean firstkill = true;
int firsthitpoints = 0; // <-- declare and initialize.
while (firstkill) {
if (firstattack > firstenemydefense){
firsthitpoints = Math.ceil(Math.random() * firstbattleattack);
}
int firstenemynewhealth = firstenemyhealth - firsthitpoints;
// ...
也,并没有直接针对你的问题,请不要比较String
等于 ==
.
if (characterquality == "Slayer"){
应该是
if (characterquality.equals("Slayer")) {
也许它适用于您的情况,但这只是测试引用相等性(而不是值相等性)。另见,How do I compare strings in Java?
最后,执行比较指令需要成本1。您应该使用 else
块,而不是将逻辑反转与多个 if
(s) 进行比较。像,
if (firstenemyattack > firstdefense) {
int firstenemyhitpointattack = (int) Math.ceil(Math.random()
* firstenemyhitpoints);
// Presumably, firstbattlehealth -= firstenemyhitpointattack here?
System.out.println("The enemy did " + firstenemyhitpointattack
+ " damage to you. You have " + firstbattlehealth
+ " health remaining.");
} else { // <-- An "else" block, firstenemyattack <= firstdefense
System.out.println("Enemy attack missed!");
}
1尽管在现代语境中很小。