Java中在if语句中局部变量要初始化才能使用?
publicstaticintfn(intindex){intresult;if(index==1||index==2){result=1;}else{//这里resul...
public static int fn(int index){
int result;
if(index==1||index==2){
result=1;
}else{//这里result未初始化一样可以用,但是如果改成}else if(index>0){就会报错result未初始化
result=fn(index-2)+fn(index-1);
}
return result;
} 展开
int result;
if(index==1||index==2){
result=1;
}else{//这里result未初始化一样可以用,但是如果改成}else if(index>0){就会报错result未初始化
result=fn(index-2)+fn(index-1);
}
return result;
} 展开
2个回答
展开全部
你仔细看JAVA基础,JAVA局部变量都必须给初始值的,你用ELSE的语句话 ,Result 始终会在Return的时候初始化一个值,因为不是if 分支就是else分支。而你用Else If 语句的话,如果你输入的Index<0 就不会进入任何分支,所以你返回的时候编译器就认为语法错误。
追问
有点明白,如果这个局部变量在return之前没有进行任何赋值操作,因为局部变量是没有默认值的,所以它在return的时候它的值是null?而返回值为int类型不允许返回null,是这样吧
追答
不是的,不管是原始类型还是引用类型,如果是局部变量的话,你始终都需要初始化一个值。你试想一下你声明了一个局部变量,他在内存中分配了一个临时空间,而该空间并没有填上任何东西,你又RETURN 回去,内存空间在系统里是随机分配的,你觉得这样的话合理么?
展开全部
是因为分支条件必须要考虑到所有的条件后才能正确处理result.
修改成public static int fn(int index){
int result;
if(index==1||index==2){
result=1;
}}else if(index>0){// 注意这里的修改
result=fn(index-2)+fn(index-1);
}
else{
result = "your name...";
}
return result;
这样就不会报错了.
}
修改成public static int fn(int index){
int result;
if(index==1||index==2){
result=1;
}}else if(index>0){// 注意这里的修改
result=fn(index-2)+fn(index-1);
}
else{
result = "your name...";
}
return result;
这样就不会报错了.
}
追问
为什么这样就不会报错?
追答
假设不是上述的if 和else if这两个条件,那么应该返回怎么的result.java编译器会查找对应的所有分支条件,确定最后的返回结果一定要有值.这是所有编程语言的共性.
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询