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");
}
}
}
答案 0 :(得分:1)
这一行
int aboy, agirl, age;
包含声明,而不是初始化。 Java不会为你初始化一个局部变量,并且有一个执行路径(else
),其中没有任何东西被分配给那些变量,然后你试图引用它们不存在的值。
在使用它们之前,必须在所有执行路径中为它们设置值。在声明它们时将它们初始化为某种东西。
答案 1 :(得分:0)
不仅可能你有一个未初始化的变量,你保证。
查看您的控制流程:您首先要求define
的值,然后执行其中一个块。如果define
为"boy"
,则不会初始化agirl
;如果define
为"girl"
,则不会初始化aboy
,如果define
也不匹配,则根本不会初始化任何变量。< / p>
看起来您正试图通过在boolean
中拥有“魔法”值来巧妙地将int
和int
的功能组合在一起。这是糟糕的设计,因为它不清楚魔法是如何工作的,但您可以通过将所有int
值初始化为0
来运行示例:
int aboy = 0, agirl = 0, age = 0;
答案 2 :(得分:0)
初始化正在为变量赋值。 声明正在创建变量。它们不一样。
您需要初始化变量的原因是因为它们可能无法初始化。所有if语句都可能为false,因此您需要为它们提供默认值。