Eclipse表示变量age,agirl和aboy可能尚未初始化。我在第一个 if 语句之前初始化了变量,它们在 if 语句中获得了值。当我想在下一个 if 语句中使用它们时,eclipse 说局部变量可能尚未初始化。这是我的代码:
import java.util.Scanner;
class Main{
public static void main(String args[]){
Scanner input = new Scanner(System.in);
String define;
int aboy, agirl, age;
System.out.println("Are you a boy or a girl?");
define = input.next();
if (define.equals("boy")){
System.out.println("What is your age?");
aboy = input.nextInt();
age = aboy;
}else if (define.equals ("girl")){
System.out.println("What is your age?");
agirl = input.nextInt();
age = agirl;
}else
System.out.println("wrong answer");
if (agirl >= 18 || aboy >= 16){
System.out.println("You are a " + define + " and you are " + age + " years old");
}
}
}
此行
int aboy, agirl, age;
包含声明,而不是初始化。 Java不会为您初始化局部变量,并且有一个执行路径(else
),其中没有为这些变量分配任何内容,然后您尝试引用它们不存在的值。
必须先在所有执行路径中使用它们之前为它们设置值。 在声明它们时将它们初始化为某些内容。
您不仅可以拥有一个未初始化的变量,还可以保证。
查看您的控制流:您首先请求 define
的值,然后只执行其中一个块。如果define
"boy"
,则不初始化agirl
;如果define
是"girl"
,你不初始化aboy
,如果define
也不匹配,你根本不初始化任何变量。
看起来您正试图通过在int
中具有"魔术"值来巧妙地组合boolean
和int
的功能。这是糟糕的设计,因为不清楚魔术是如何工作的,但是您可以通过将所有int
值初始化为0
来运行示例:
int aboy = 0, agirl = 0, age = 0;
初始化是给变量赋值。声明是创建变量。它们是不一样的。
您需要初始化变量的原因是它们可能不会被初始化。所有 if 语句都可能为 false,因此您需要为它们提供一个默认值。