[英]java Local variable not initializing outside if-statement
Eclipse说变量年龄,agirl和aboy可能尚未初始化。 我在第一个if语句之前初始化了变量,并且它们在if语句中获得了值。 当我想在下一个if语句中使用它们时,说本地变量可能尚未初始化。 这是我的代码:
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,因此您需要给它们提供默认值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.