我想知道为什么我的变量不会在这里返回:
public int getAge() {
int age;
if (currentMonth != birthMonth) {
if (currentMonth > birthMonth) {
age = currentYear - birthYear;
}
else {
age = currentYear - birthYear + 1;
}
}
if (currentMonth == birthMonth) {
if (currentDay >= birthDay) {
age = currentYear - birthYear;
}
else {
age = currentYear - birthYear + 1;
}
}
return age;
}
所有变量(例如currentMonth和birthMonth)都已初始化,但我似乎无法获得该年龄的回报。
答案 0 :(得分:2)
请注意,您声称您的变量已在第2行初始化,但事实并非如此。该变量在此处声明为 ,但从未初始化(在if语句之外)。
IDE可能会告诉您年龄是单元化的,即使很明显此功能可以正常运行。问题是,如果两个if语句都没有输入,那么它有可能被未初始化。
Erwin的答案中的解决方案是正确的,你需要写一个else而不是另一个if语句。
答案 1 :(得分:0)
如果我没有输入那些if
块中的任何,我的age
设置值不会令人满意。 Java将此视为编译时失败,因为它无法保证程序的执行流程将设置age
。
Java不会查看条件分支以查看它们是否会触发;它将查看条件分支以查看是否有可能不会。这就是为什么你的变量不会被初始化。
如果您使用else
语句,因为您的条件只有两种可能的情况,那么Java将能够保证通过其执行流程设置age
的值。
public int getAge() {
int age;
if(currentMonth != birthMonth) {
if(currentMonth > birthMonth) {
age = currentYear - birthYear;
} else {
age = currentYear - birthYear + 1;
}
} else {
if(currentDay >= birthDay) {
age = currentYear - birthYear;
} else {
age = currentYear - birthYear + 1;
}
}
return age;
}
答案 2 :(得分:0)
虽然你有两个相互排斥的if
语句,但这不是编译器可以检测的(根据规范甚至不允许这样做)
要使编译器检测到第二个块始终执行,如果第一个块不是,请重写if
语句。你的代码是:
if (currentMonth != birthMonth) {
// Block 1
}
if (currentMonth == birthMonth) {
// Block 2
}
将其更改为:
if (currentMonth != birthMonth) {
// Block 1
} else {
// Block 2
}
然后编译器将能够检测到您始终初始化变量age
。