直接上代码:
1)if-else if结构没有以else子句结束
//code 1
public class TestCoding {
public static int JumpFloor(int target) {
if (target <= 0) {
return -1;
} else if (target == 1) {
return 1;
} else if (target == 2) {
return 2;
} else if(target>=3){
return JumpFloor(target - 1) + JumpFloor(target - 2);
}
}
public static void main (String[]args){
int num = JumpFloor(10);
System.out.println(num);
}
}
报错: Error:(13, 5) java: 缺少返回语句
2)以else字句结束,就输出正常
//code 2
public class TestCoding {
public static int JumpFloor(int target) {
if (target <= 0) {
return -1;
} else if (target == 1) {
return 1;
} else if (target == 2) {
return 2;
} else {
return JumpFloor(target - 1) + JumpFloor(target - 2);
}
}
public static void main (String[]args){
int num = JumpFloor(10);
System.out.println(num);
}
}
3)参考一个不知道来源的规则:
下面来了一个杠精
以及一个经验家
4)也不是说一定要写出if else if 的形式,下面这种也可以正常输出:
// code 3
public class TestCoding {
public static int JumpFloor(int target) {
int num=0;
if (target <= 0) {
return num= -1;
} else if (target == 1) {
return num=1;
} else if (target == 2) {
return num=2;
} else if(target>=3) {
return num=JumpFloor(target - 1) + JumpFloor(target - 2);
}
//添加返回语句
return num;
}
public static void main (String[]args){
int num = JumpFloor(10);
System.out.println(num);
}
}
分析:
1)if-else if结构以else if {}结束,虽然省略了esle{}字句,但不影响输出结果.以code 3为例,没有else{}字句。
2)依然以code 3为例,省略的esle{}字句可以条件为空,例如
if (target <= 0) {
} else if (target == 1) {
} else if (target == 2) {
} else if(target>=3) {
}
已经包含了target的所有可能,else{}条件为空。
3)省略else语句,存在没有返回语句的风险。但不清楚原因。
分析应该是空语句esle{}缺少返回语句,导致方法
public static int JumpFloor(int target){}
返回语句的缺失。