-
程序流程控制
注:循环结构看另一篇文章
-
分支语句1_if-else
格式1.
格式2.
格式3.
使用说明
6. 如果多个条件表达式之间有交集的关系,需要根据实际情况,考虑清楚应该将哪个结构声明在上面。
7. 如果多个条件表达式之间有包含的关系,通常情况下,需要将范围小的声明在范围大的上面。否则,范围小的就没机会执行了。
Test
编写程序:由键盘输入三个整数分别存入变量num1、num2、num3,对它们进行排序(使用 if-else if-else),并且从小到大输出。
import java.util.Scanner;
public class TestDecision {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);//创建接收键盘录入对象——scanner
System.out.println("请输入第一个整数");
int num1 = s.nextInt();//接收键盘输入对象
System.out.println("请输入第一个整数");
int num2 = s.nextInt();
System.out.println("请输入第一个整数");
int num3 = s.nextInt();
if (num1 > num2){
if (num3 > num1) // if-else结构是可以相互嵌套的。
System.out.println(num3 + "," + num1 + "," + num2);
else if (num3 < num2){
System.out.println(num1 + "," + num2 + "," + num3);
}else{
System.out.println(num1 + "," + num3 + "," + num2);
}
}
else{
if (num3 > num2)//如果if-else结构中的执行语句只有一行时,对应的一对{}可以省略的。
System.out.println(num3 + "," + num2+ "," + num1);
else if (num3 < num1){
System.out.println(num2 + "," + num1 + "," + num3);
}else{
System.out.println(num2 + "," + num3 + "," + num1);
}
}
}
}
if-else的就近原则
int x = 4;
int y = 1;
if (x > 2)
if (y > 2)
System.out.println(x + y);
//System.out.println("未加大括号的if,其后只能跟一条语句");
else //就近原则
System.out.println("x is " + x);//x is 4
-
分支语句2_switch-case
格式:
说明
1. 根据switch表达式中的值,依次匹配各个case中的常量。一旦匹配成功,则进入相应case结构中,调用其执行语句。当调用完执行语句以后,则仍然继续向下执行其他case结构中的执行语句,直到遇到break关键字(break关键字是可选的。)或此switch-case结构末尾结束为止。
//需求:从键盘分别输入年、月、日,判断这一天是当年的第几天
public class TestDecision {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.println("请输入年份");
int year = s.nextInt();
System.out.println("请输入月份");
int month = s.nextInt();
System.out.println("请输入月份第几天");
int day = s.nextInt(); //定义一个变量来保存总天数
//方式一:冗余
/*if(month == 1){
sumDays = day;
}else if(month == 2){
sumDays = 31 + day;
}else if(month == 3){
sumDays = 31 + 28 + day;
}else if(month == 4){
sumDays = 31 + 28 + 31 + day;
}
//...
else{
month == 12
sumDays = ..... + day;
} */
//方式二:冗余
/*switch(month){
case 1:
sumDays = day;
break;
case 2:
sumDays = 31 + day;
break;
case 3:
sumDays = 31 + 28 + day;
break;
...
case 12:
sumDays = 31 + 28 + ... + 31 + 30 + day;
} */
int sumDays = 0;
switch (month) {
case 12:
sumDays += 30;
case 11:
sumDays += 31;
case 10:
sumDays += 30;
case 9:
sumDays += 31;
case 8:
sumDays += 31;
case 7:
sumDays += 30;
case 6:
sumDays += 31;
case 5:
sumDays += 30;
case 4:
sumDays += 31;
case 3:
//sumDays += 28;
//判断year是否是闰年
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {//可以被4整除,但不可被100整除或可以被400整除
sumDays += 29;
} else {
sumDays += 28;
}
case 2:
sumDays += 31;
case 1:
sumDays += day;
}
System.out.println(year + "年" + month + "月" + day + "日是当年的第" + sumDays + "天");
}
}
2. switch结构中的表达式,只能是如下的6种数据类型之一:byte 、short、char、int、枚举类型(JDK5.0新增)switch表达式使用枚举类型示例、String类型(JDK7.0新增)
boolean play = true;
switch (play){//编译不通过
case true:
System.out.println("放假出去玩!");
break;
case false:
System.out.println("放假加班!");
break;
default:
System.out.println("输入有误");
3. case 之后只能声明常量。不能声明范围。
int age = 10;
switch(age){
case age > 18://编译不通过
System.out.println("成年了");
break;
default:
System.out.println("未成年");
}
4. default:相当于if-else结构中的else,default结构是可选的,而且位置是灵活的(一般放在程序的最后)。
5. 如果switch-case结构中的多个case的执行语句相同,则可以考虑进行合并。
int score = 60;
switch(score / 10){
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
System.out.println("不及格");
break;
case 6:
case 7:
case 8:
case 9:
case 10:
System.out.println("及格");
break;
}
//更优的解决方案:
switch(score / 60){
case 0:
System.out.println("不及格");
break;
case 1:
System.out.println("及格");
break;
}
switch和if语句的对比
1. 凡是可以使用switch-case的结构,都可以转换为if-else。反之,不成立。
2. 我们写分支结构时,当发现既可以使用switch-case,(同时,switch中表达式的取值情况不太多),又可以使用if-else时,我们优先选择使用switch-case。原因:switch-case执行效率稍高。
说明:本篇文章部分内容和图片引用尚硅谷官网内容,特此说明。@尚硅谷官网地址