顺序结构:程序从上到下执行。
分支结构:
if-else if - else
switch-case
循环结构:
for
while
do-while
//============================================================================================================================
1.if-else条件判断结构
1.1.
结构一:
if(条件表达式){
执行表达式
}
结构二:二选一
if(条件表达式){
执行表达式1
}else{
执行表达式2
}
结构三:n选一
if(条件表达式){
执行表达式1
}else if(条件表达式){
执行表达式2
}else if(条件表达式){
执行表达式3
}
...
else{
执行表达式n
}
1.2.说明:
1》. else 结构是可选的。
2.》 针对于条件表达式:
> 如果多个条件表达式之间是“互斥”关系(或没有交集的关系),哪个判断和执行语句声明在上面还是下面,无所谓。
> 如果多个条件表达式之间有交集的关系,需要根据实际情况,考虑清楚应该将哪个结构声明在上面。
> 如果多个条件表达式之间有包含的关系,通常情况下,需要将范围小的声明在范围大的上面。否则,范围小的就没机会执行了。
3》. if-else结构是可以相互嵌套的。
4》. 如果if-else结构中的执行语句只有一行时,对应的一对{}可以省略的。但是,不建议大家省略。
2.switch-case选择结构
switch(表达式){
case 常量1:
执行语句1;
//break;
case 常量2:
执行语句2;
//break;
...
default:
执行语句n;
//break;
}
2.说明:
① 根据switch表达式中的值,依次匹配各个case中的常量。一旦匹配成功,则进入相应case结构中,调用其执行语句。
当调用完执行语句以后,则仍然继续向下执行其他case结构中的执行语句,直到遇到break关键字或此switch-case结构
末尾结束为止。
② break,可以使用在switch-case结构中,表示一旦执行到此关键字,就跳出switch-case结构
③ switch结构中的表达式,只能是如下的6种数据类型之一:
byte 、short、char、int、枚举类型(JDK5.0新增)、String类型(JDK7.0新增)
④ case 之后只能声明常量。不能声明范围。
⑤ break关键字是可选的。
⑥ default:相当于if-else结构中的else.
default结构是可选的,而且位置是灵活的。
3.如果switch-case结构中的多个case的执行语句相同,则可以考虑进行合并。
4.break在switch-case中是可选的
1 练习1:如何获取一个随机数:10 - 99 2 3 int value = (int)(Math.random() * 90 + 10);// [0.0,1.0) --> [0.0,90.0) --->[10.0, 100.0) -->[10,99] 4 5 System.out.println(value); 6 7 //公式:[a,b] : (int)(Math.random() * (b - a + 1) )+ a
//============================================================================================================================
1.循环结构的四要素
① 初始化条件
② 循环条件 --->是boolean类型
③ 循环体
④ 迭代条件
说明:通常情况下,循环结束都是因为②中循环条件返回false了。
2.三种循环结构:
2.1 for循环结构
for(①;②;④){
③
}
执行过程:① - ② - ③ - ④ - ② - ③ - ④ - ... - ②
2.2 while循环结构
①
while(②){
③;
④;
}
执行过程:① - ② - ③ - ④ - ② - ③ - ④ - ... - ②
说明:
写while循环千万小心不要丢了迭代条件。一旦丢了,就可能导致死循环!
for和while循环总结:
1》. 开发中,基本上我们都会从for、while中进行选择,实现循环结构。
2》. for循环和while循环是可以相互转换的!
区别:for循环和while循环的初始化条件部分的作用范围不同。
3》. 我们写程序,要避免出现死循环。
2.3 do-while循环结构
①
do{
③;
④;
}while(②);
执行过程:① - ③ - ④ - ② - ③ - ④ - ... - ②
说明:
1》.do-while循环至少会执行一次循环体!
2》.开发中,使用for和while更多一些。较少使用do-while
3》.“无限循环”结构: while(true) 或 for(;;)
总结:如何结束一个循环结构?
方式一:当循环条件是false时
方式二:在循环体中,执行break
4.嵌套循环
1》.嵌套循环:将一个循环结构A声明在另一个循环结构B的循环体中,就构成了嵌套循环
内层循环:循环结构A
外层循环:循环结构B
2》.说明:
① 内层循环结构遍历一遍,只相当于外层循环循环体执行了一次
② 假设外层循环需要执行m次,内层循环需要执行n次。此时内层循环的循环体一共执行了m * n次
③ 外层循环控制行数,内层循环控制列数
1 【典型练习】 2 3 //练习一: 4 5 /* 6 7 ****** 8 9 ****** 10 11 ****** 12 13 ****** 14 15 */ 16 17 for(int j = 1;j <= 4;j++ ){ 18 19 for(int i = 1;i <= 6;i++){ 20 21 System.out.print('*'); 22 23 } 24 25 System.out.println(); 26 27 } 28 29 //练习二: 30 31 /* i(行号) j(*的个数) 32 33 * 1 1 34 35 ** 2 2 36 37 *** 3 3 38 39 **** 4 4 40 41 ***** 5 5 42 43 */ 44 45 46 47 for(int i = 1;i <= 5;i++){//控制行数 48 49 for(int j = 1;j <= i;j++){//控制列数 50 51 System.out.print("*"); 52 53 } 54 55 System.out.println(); 56 57 } 58 59 60 61 //练习三:九九乘法表 62 63 public static void main(String[] args) { 64 65 for(int i =1;i<=9;i++){ 66 67 for(int j=1;j<=i;j++){ 68 69 System.out.print(j+"*"+i+"="+(i*j) + " "); 70 71 } 72 73 System.out.println(); 74 75 } 76 77 }
补充:衡量一个功能代码的优劣:
1.正确性
2.可读性
3.健壮性
4.高效率与低存储:时间复杂度 、空间复杂度 (衡量算法的好坏)
如何理解流程控制的练习: 流程控制结构的使用 + 算法逻辑
//============================================================================================================================
break和continue关键字的使用
使用范围循环中使用的作用(不同点)相同点
break:switch-case
循环结构中结束当前循环关键字后面不能声明执行语句
continue:循环结构中结束当次循环关键字后面不能声明执行语句
//============================================================================================================================
【练习四】
1 //一个数如果恰好等于它的因子之和,这个数就称为"完数"。(因子:除去这个数本身的约数) 2 //例如6=1+2+3.编程 找出1000以内的所有完数 3 public static void main(String[] args) { 4 System.out.println("1-1000之间的完数有:"); 5 for(int i=1;i<=1000;i++){ 6 int sum = 0; 7 for(int j=1;j<i;j++){ 8 if(i%j==0){ 9 sum +=j; 10 } 11 } 12 if(sum == i){ 13 System.out.println(i); 14 } 15 } 16 }
【练习五】
1 //输入两个正整数m和n,求其最大公约数和最小公倍数 2 int m = 12, n = 28; 3 //获取m和n的较大值 4 int max = (m > n)? m : n; 5 //获取m和n的较小值 6 int min = (m < n)? m : n; 7 8 //求m和n的最大公约数 9 for(int i = min;i >= 1;i--){ 10 if( m % i == 0 && n % i == 0){ 11 System.out.println("m和n的最大公约数是:" + i); 12 break; 13 } 14 } 15 //求m和n的最小公倍数 16 for(int i = max;i <= m * n;i++){ 17 if( i % m == 0 && i % n == 0){ 18 System.out.println("m和n的最小公倍数是:" + i); 19 break; 20 } 21 }
【练习六】
1 //求调和级数中从第多少项开始值大于10 2 //调和级数的第n项形式为:1+1/2+1/3+…+1/n 3 public static void main(String[] args) { 4 double sum = 0.0; 5 int i = 1; 6 while (true) { 7 sum += 1.0 / i; 8 if (sum > 10) { 9 break; 10 } 11 i++; 12 } 13 System.out.println(i); 14 }
【练习七】
/**打印如下的图形:三角形 * * * * * * * * * * * * * * * * * * * * * * * * * */ for (int i = 0; i < 7; i++) { if (i < 4) { for (int j = 0; j < 2 * i + 1; j++) { System.out.print("* "); } System.out.println(); } else { for (int k = 0; k < 13 - 2 * i; k++) { System.out.print("* "); } System.out.println(); } }
【练习八】
/**打印如下的图形:菱形1 * * * * * * * * * * * * * * * * * * * * * * * * * */ // 上半部分 for (int i = 0; i < 5; i++) { // 输出“-” for (int j = 0; j < 4 - i; j++) { System.out.print(" "); } // 输出“* ” for (int k = 0; k < i + 1; k++) { System.out.print("* "); } System.out.println(); } // 下半部分 for (int i = 0; i < 4; i++) { for (int j = 0; j < i + 1; j++) { System.out.print(" "); } for (int k = 0; k < 4 - i; k++) { System.out.print("* "); } System.out.println(); }