1.流程控制
1.1定义
使用不同的关键字/语法来控制代码的执行流程/顺序
1.2分类
顺序结构:代码从上往下一次执行
分支结构:到达某个状态时,可能会有多种情况,每种情况都需要提前准备好,所以多条路的路口就是一个分支。代码写得多,程序运行的少。
循环结构:某段代码相同或者相似,使用相同的逻辑。使用一定的格式,来完成相同代码的反复执行
2.选择语句--switch
2.1switch语句
语句格式
switch(表达式) {
case 常量值1:
语句体1;
break;
case 常量值2:
语句体2;
break;
...
default:
语句体n+1;
break;
}
执行流程:
-
首先计算出表达式的值
-
其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。
-
最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。
判断一天是星期几:
public static void main(String[] args) {
//定义变量,判断是星期几
int weekday = 6;
//switch语句实现选择
switch(weekday) {
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
case 3:
System.out.println("星期三");
break;
case 4:
System.out.println("星期四");
break;
case 5:
System.out.println("星期五");
break;
case 6:
System.out.println("星期六");
break;
case 7:
System.out.println("星期日");
break;
default:
System.out.println("你输入的数字有误");
break;
}
}
2.2case的穿透性
在switch语句中,如果case的后面不写break,将出现穿透现象,也就是不会在判断下一个case的值,直接向后运行,直到遇到break,或者整体switch结束。
键盘录入一个月份,输出这个月份的季节
345月是春季,678是夏季,9、10、11秋季,12、1、2冬季
其他数字,没有任何季节,录入错误
System.out.println("请输入月份:");
Scanner sc = new Scanner(System.in);
int month = sc.nextInt();
switch(month){
case 3:
case 4:
case 5:System.out.println("春季");break;
case 6:
case 7:
case 8:System.out.println("夏季");break;
case 9:
case 10:
case 11:System.out.println("秋季");break;
case 12:
case 1:
case 2:System.out.println("冬季");break;
default:System.out.println("月份输入错误");
}
2.3char类型在switch中的应用
int x = 1, y = 2;
char ch = '*';
switch (ch) {
case '+':
System.out.println("x+y=" + (x + y));
break;
case '-':
System.out.println("x-y="+(x-y));
break;
case '*':
System.out.println("x*y="+(x*y));
break;
case '/':
System.out.println("x/y="+(x/y));
break;
default:
System.out.println("不靠谱");
}
3.分支结构
3.1if语句第一种格式: if
格式:
if(布尔表达式){ 语句体; }
执行流程:
首先判断关系表达式看其结果是true还是false
如果是true就执行语句体
如果是false就不执行语句体
小毛参加考试,如果小毛考试成绩及格(>60分),则输出小毛考试成绩及格。
public static void main(String[] args) {
// 键盘输入小毛获得的分数,如果>=60 输出考试及格
Scanner sc = new Scanner(System.in);
System.out.println("请输入小毛获得分数:");
int score = sc.nextInt(); // 键盘输入一个整数赋值给 score
if(score>=60){
System.out.println("小毛考试及格了");
System.out.println("回家不用挨揍了");
}
/*
if(score>=60){
System.out.println("小毛考试及格了");
}
}
找出int x = 12;int y = 20;int z = 8;三个数中最大的数
public static void main(String[] args) {
int a = 11;
int b = 65;
int c = 99;
// 找出三个数中的最大值
// 编程方法:假设修正法
int max = a; // 1 假设 a最大
if(b>max){ // 修正
max = b;
}
if(c>max){ // 修正
max = c;
}
System.out.println("最大值为:"+max);
}
3.2if语句第二种格式:if...else
格式:
if(关系表达式) {
语句体1;
}else {
语句体2;
}
执行流程:
首先判断关系表达式看其结果是true还是false
如果是true就执行语句体1
如果是false就执行语句体2
注意:if代码块和else代码块只会执行其中一个
小邓参加考试,如果成绩>=60分,输出“成绩及格”。如果成绩<60分,输出“成绩不及格”。
public static void main(String[] args) {
System.out.println("请输入小邓的成绩:");
Scanner sc = new Scanner(System.in);
int score = sc.nextInt();
if(score>=60){
System.out.println("成绩及格");
}else{
System.out.println("不及格");
}
}
3.3if语句第三种格式: if...else if ...else
格式:
if (判断条件1) {
执行语句1;
} else if (判断条件2) {
执行语句2;
}
...
}else if (判断条件n) {
执行语句n;
} else {
执行语句n+1;
}
执行流程:
首先判断关系表达式1看其结果是true还是false
如果是true就执行语句体1
如果是false就继续判断关系表达式2看其结果是true还是false
如果是true就执行语句体2
如果是false就继续判断关系表达式…看其结果是true还是false
…
如果没有任何关系表达式为true,就执行语句体n+1。
根据键盘输入的数值不同,打印对应的星期数。
int x = 4;
if (x == 1) {
System.out.println("星期一");
} else if (x == 2) {
System.out.println("星期二");
} else if (x == 3) {
System.out.println("星期三");
} else if (x == 4) {
System.out.println("星期四");
} else if (x == 5) {
System.out.println("星期五");
} else if (x == 6) {
System.out.println("星期六");
} else if (x == 7) {
System.out.println("星期日");
} else {
System.out.println("请输入数字1-7");
}
根据用户输入的不同成绩(0~100),给出相应的提示:优秀,良好,及格,不及格...
public static void main(String[] args) {
System.out.println("请输入成绩:");
Scanner sc = new Scanner(System.in);
int score = sc.nextInt();
if(score>=90 && score<=100){
System.out.println("优秀");
}else if(score>=80 && score<90){
System.out.println("良好");
}else if(score >=60 && score<80){
System.out.println("及格");
}else if(score<60 && score>=0){
System.out.println("不及格");
}else{
System.out.println("分数输入有误");
}
}
3.4if和switch的区别
1、相同点:
if语句和switch语句都可以表达分支结构
2、不同点:
(1)if语句格式相对灵活,更加强大,switch语句相对弱小。所有的switch语句都可以被if语句替代。
(2)if语句更多的是做一些连续性的判断,而switch语句更多的是做一些离散性的匹配
(3)if语句每次都需要获取表达式的值,而switch只获取一次表达式的值,所以相对来说switch的效率高一些。
练习1: 判断闰年
闰年是公历中的名词
普通闰年:能被四整除但不能被100整除的年份为普通闰年(2004是闰年,1999不是闰年)
世纪闰年:能被400整除的为世纪闰年(2000为世纪闰年,1900不是世纪闰年)
public static void main(String[] args) {
System.out.println("请输入一个年份:");
Scanner sc = new Scanner(System.in);
int year = sc.nextInt();
if((year%4==0 && year%100!=0) || year%400==0){
System.out.println(year+"年是闰年");
}else{
System.out.println(year+"年不是闰年");
}
}
练习2:水仙花数
说明:所谓的水仙花数是指一个三位数,其各个位数字的立方和等于该数本身。
举例:153就是一个水仙花数。 153 = 1*1*1 + 5*5*5 + 3*3*3
public static void main(String[] args) {
System.out.println("请输入一个三位整数");
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
/*
* 取出num这个三位数的各个位上的数字 判断各个位上的数字的立方和是否等于num
* */
int gewei = num%10;
int shiwei = num/10%10;
int baiwei = num/100;
if(num==gewei*gewei*gewei+shiwei*shiwei*shiwei+baiwei*baiwei*baiwei){
System.out.println(num+"是水仙花数");
}else{
System.out.println(num+"不是水仙花数");
}
}