07-流程控制

顺序结构:程序从上到下执行。

分支结构:

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();

}

原文地址:https://www.cnblogs.com/shici/p/13239145.html