java_02-流程控制
结构类型
顺序结构
分支结构
- if-else结构
- switch-case结构
循环结构
-
for循环 (遍历数组之类)
无限循环 for(;😉{}
-
while循环 (条件比较复杂的情况)
无限循环 while(true){}
-
do-while循环
完整笔记
package main.java.chapter2dir;
import com.sun.xml.internal.xsom.impl.scd.Step;
/**
* ## 结构类型
* 顺序结构
* 分支结构
* - if-else结构
* - switch-case结构
* 循环结构
* - for循环
* - while循环
* - do-while循环
* <p>
* <p>
* 一、分支语句1 if-else结构
* 第一种:
* if(条件表达式){
* 执行表达式
* }
* <p>
* 第二种:
* if(条件表达式1){
* 执行表达式1
* }else if(条件表达式2){
* 执行表达式2
* }else if(条件表达式3){
* 执行表达式3
* }
* ...
* else{
* 执行表达式n
* }
* <p>
* 二、分支语句2 switch-case结构
* 1、格式:
* switch(){
* case 常量1:
* 执行语句1;
* //break
* case 常量2:
* 执行语句2;
* //break
* ...
* defaut:
* 执行语句n;
* //break
* }
* <p>
* 三、if-else结构和switch-case结构区别联系
* 1)凡是可以使用switch-case结构的都可以使用if-else代替,反之,不可以。三元用if-else。
* 2)switch-case效率高于if-else
* <p>
* 循环语句新建了一个class
*/
public class q2FlowControlI {
public static void main(String[] args) {
/**
*
* 一 分支语句1 if-else结构
* 第一种:
* if(条件表达式){
* 执行表达式
* }
* <p>
* 第二种:
* if(条件表达式1){
* 执行表达式1
* }else if(条件表达式2){
* 执行表达式2
* }else if(条件表达式3){
* 执行表达式3
* }
* ...
* else{
* 执行表达式n
* }
*/
//举例1
int hearBeats = 179;
if (hearBeats < 60 || hearBeats > 100) {
System.out.println("进一步检查");
}
System.out.println("检查结束");
//举例2
int age = 23;
if (age < 18) {
System.out.println("你数学几分");
} else if (age < 25) {
System.out.println("你的存款几位数");
} else {
System.out.println("离谱");
}
/**
* 二、分支语句2 switch-case结构
* 1.格式:
* switch(){
* case 常量1:
* 执行语句1;
* //break
* case 常量2:
* 执行语句2;
* //break
* ...
* defaut:
* 执行语句n;
* //break
* * }
* 2.说明:
* ①根据switch表达式中的值,依次匹配各个case中的常量,一旦匹配成功,则进入相应的case结构中,调用其执行语句。
* 当调用完执行语句后,任然继续向下执行其他case结构中的执行语句,直达遇到break关键字或次switch-case结构结束。
* ②使用在switch-case结构中,遇到则跳出该结构。
* ③switch结构中的表达式,只支持六种类型:byte、short、char、int、枚举类型(jdk5.0新增)、String类型(jdk7.0新增)。
* 报错:如果用了以上类型之外的,会报错不兼容类型
* ④case之后只能声明常量。不能声明范围。
* ⑤default 相当于if-else中的else,可选,位置灵活。
*/
//常规举例1
int number = 1;
switch (number) { //表达式非条件表达式
case 0:
System.out.println("zero");
break;
case 1:
System.out.println("one");
break; // 如果这里没有break,满足1后面的都会打印出来 one two three other
case 2:
System.out.println("two");
break;
case 3:
System.out.println("three");
break;
default:
System.out.println("other");
}
//举例2 目的:说明多个 相同输出的case可以放一起
//例题:对学生成绩大于60分的,输出合格,低于60分的输出不合格
// 更优解 switch(score/60)
int score = 75;
switch (score / 10) {
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
System.out.println("不及格");
break;
case 7:
case 8:
case 9:
case 10:
System.out.println("及格");
break;
default:
break;
}
// 举例3 需求:输入年,月份,日期,求是年的第几天 (利用了无break,会一直往下执行的特性)
/*
注:判断是否是闰年的标准:
1)能被4整除,但不能被100整除;
2)或能被400整除。
*/
int year = 2018;
int mon = 3;
int day = 5;
Integer num = 0;
switch (mon) {
case 12:
num += 31;
case 11:
num += 30;
case 10:
num += 31;
case 9:
num += 30;
case 8:
num += 31;
case 7:
num += 31;
case 6:
num += 30;
case 5:
num += 31;
case 4:
num += 30;
case 3:
num += 31;
case 2:
if (year % 4 == 0 & year % 100 != 0 || year % 400 == 0) {
num += 29;
} else {
num += 28;
}
case 1:
num += day;
default:
System.out.println(year + "年" + mon + "月" + day + "日是" + year + "年的第" + num + "天");
}
/**
* 循环结构:
* ① 初始化条件
* ② 循环条件 ---> 布尔类型
* ③ 循环体
* ④ 迭代条件
*
* 循环结构1:for循环 支持为空,break退出循环for(;;){}
* for(①;②;④){
* ③;
* }
* break关键字的使用
*
* 循环结构2:while循环
* ①
* while(②){
* ③;
* ④;
* }
*
* for和while的区别和联系
* 1)两者可以互相转换
* 2)for的变量时循环体内私有的
*
* 循环结构3:do-while结构
* ①
* do{
* ③;
* ④;
* }while(②)
*
* do-while结构和while结构的区别和联系
* 1)do-while结构先执行一次循环体,再判断
*
*/
/*
例1:for循环结构
i仅在循环结构内存在
*/
for (int i = 0; i < 5; i++) {
System.out.println("hello " + i);
}
/*
例2:break的使用
需求:求两个数的最大公约数和最小公倍数(比如12和20的最大公约数是4,最小公倍数是60)。
*/
System.out.println("-----break应用-----\n-----需求:求两个数的最大公约数和最小公倍数(比如12和20的最大公约数是4,最小公倍数是60)-----");
Integer num1 = 12;
Integer num2 = 20;
// 最大公约数
// step1 取num1 num2最小值
Integer max_num = (num1 >= num2) ? num1 : num2;
// step2 遍历
for (int i = max_num; i < num1 * num2; i++) {
if (i % num1 == 0 && i % num2 == 0) {
System.out.println("最大公约数是" + i);
break;
}
}
// 最小公倍数
Integer min_num = (num1 <= num2) ? num1 : num2;
for (int i = min_num; i <= max_num; i--) {
if (num1 % i == 0 && num2 % i == 0) {
System.out.println("最小公倍数是" + i);
break;
}
}
System.out.println("-----while demo 遍历100以内的所有偶数-----");
/*
例2:while循环,遍历100以内的所有偶数
*/
int i = 1;
while (i <= 100) {
if (i % 2 == 0) {
System.out.println(i);
}
i++;
}
System.out.println("-----do-while demo 遍历100以内的所有偶数-----");
/*
例3:do-while循环,遍历100以内所有偶数
*/
int ii = 1;
do{
if(ii % 2 == 0){
System.out.println(ii);
}
ii++;
}while(ii <= 100);
}
}
/*
进一步检查
检查结束
你的存款几位数
one
及格
2018年3月5日是2018年的第64天
hello 0
hello 1
hello 2
hello 3
hello 4
-----break应用-----
-----需求:求两个数的最大公约数和最小公倍数(比如12和20的最大公约数是4,最小公倍数是60)-----
最大公约数是60
最小公倍数是4
-----while demo 遍历100以内的所有偶数-----
2
4
6
8
10
12
14
16
18
20
22
24
26
28
30
32
34
36
38
40
42
44
46
48
50
52
54
56
58
60
62
64
66
68
70
72
74
76
78
80
82
84
86
88
90
92
94
96
98
100
-----do-while demo 遍历100以内的所有偶数-----
2
4
6
8
10
12
14
16
18
20
22
24
26
28
30
32
34
36
38
40
42
44
46
48
50
52
54
56
58
60
62
64
66
68
70
72
74
76
78
80
82
84
86
88
90
92
94
96
98
100
Process finished with exit code 0
*/
Done