Java流程控制

4.流程控制

4.1关于代码的三种结构

顺序结构

程序从上到下逐行地执行,中间没有任何判断和跳转。

分支结构

根据条件,选择性地执行某段代码。有if…elseswitch-case两种分支语句。

循环结构

根据循环条件,重复性的执行某段代码。有while(){}do{}while()for(;;){}三种循环语句。(注:JDK1.5提供了for each循环,方便的遍历集合、数组元素)

4.2分支结构

4.2.1条件判断: if-else语句

第一种结构:

       if(boolean表达式){

                                   java语句;

                            }

第二种结构:

       if(boolean表达式){

                                   java语句;

                            }else{

                                   java语句;

                            }

第三种结构:

       if(boolean表达式){

                                   java语句;

                            }else if(boolean表达式){

                                   java语句;

                            }else if(boolean表达式){

                                   java语句;

                            }       

第四种结构:

if(boolean表达式){

                                   java语句;

                            }else if(boolean表达式){

                                   java语句;

                            }else {

                                   java语句;

                            }

注意:

①一旦满足某个条件表达式,则进入其执行语句块执行,执行完毕,跳出当前的条件判断结构,不会执行其以下的条件结构语句。即在if语句中只要有一个分支执行,则整个if语句结束。上面的结构二和四可以保证一定会有一个分支语句执行,因为他们都有else语句。

②如果诸多个条件表达式之间为“互斥”关系,多个结构可以上下调换顺序。如果诸多个条件表达式之间为“包含”关系,要求条件表达式范围小的写在范围大的上面。

分支语句中,如果只有一条java语句,大括号可以省略。不推荐使用,别人这样写能看懂就行。

if(isSuccess)

                     System.out.println("登录成功"); 

              else

                     System.out.println("登录失败");

④例题:

系统给定人的年龄.[1-100]

系统给定程序,通过人的年龄,来判断这个人处于生命的哪个阶段:

[1-5] 幼儿 [6-18] 少年 [19-35] 青年 [36-55] 中年 [56-100] 老年

public class IfTest02{

       public static void main(String[] args){

       //该程序假定年龄是合法的。

              int age = 56;

              /*if(age>=1 && age<=5){

                     System.out.println("幼儿");

              }else if(age<=18){

                     System.out.println("少年");

              }else if(age <= 35){

                     System.out.println("青年");

              }else if(age<= 55){

                     System.out.println("中年");

              }else{

                     System.out.println("老年");

              }*/

           //String不是基本数据类型,是引用类型

              String grade = "老年";

              if(age>=1 && age<=5){

                     grade = "幼儿";

              }else if(age<=18){

                     grade = "少年";

              }else if(age <= 35){

                     grade = "青年";

              }else if(age<= 55){

                     grade = "中年";

              }

              System.out.println(grade);

       }}

4.2.2选择结构:switch语句

格式:

switch(变量){

case 常量1:语句1;break;

case 常量2:语句2;break;

… …

case 常量N:语句N;break;

default:语句;break;

}

规则:

①switch(表达式)中表达式的返回值必须是下述几种类型之一:byteshortcharint,枚举,String

②case子句中的值必须是常量,且所有case子句中的值应是不同的;

③default是可以省略的,并且其位置也是灵活的,但是通常将其放在case语句之后,当没有匹配的case时,执行default;

④break语句用来在执行完一个case分支后使程序跳出switch语句块;break语句也可以没有,如果没有break,程序会顺序执行到switch结尾。

switchif语句的对比:

⑤如果判断的具体数值不多,而且符合byte、 short 、int、 char这四种类型。虽然两个语句都可以使用,建议使用swtich语句。因为效率稍高。

⑥其他情况:对区间判断,对结果为boolean类型判断,使用if,if的使用范围更广。

4.3循环结构

循环语句功能

  • 在某些条件满足的情况下,反复执行特定代码的功能

循环语句的四个组成部分

  • 初始化部分(init_statement)
  • 循环条件部分(test_exp)
  • 循环体部分(body_statement)
  • 迭代部分(alter_statement)

循环语句分类

  • for 循环
  • while 循环
  • do/while 循环

4.3.1 for 循环

for(表达式1;表达式2;表达式3){

                      java语句;

               }

表达式1是初始化表达式,最先执行,只执行一次。表达式2必须是boolean类型的表达式。

for循环开始执行,先执行表达式1,并只执行一次。进而判断表达式2的结果,如果是true,则执行java语句。再执行表达式3,然后再判断表达式2的结果,直到表达式2的结果是false,则for循环结束。

注:死循环

for(;;){

                     System.out.println("Test");

               }

doc环境下ctrl+c 停止,强制退出。

②关于for循环的嵌套,所有控制语句都可以嵌套在一起使用。

public class ForTest02{

              public static void main(String[] args){

                     for(int i=5;i>0;i--){

                            for(int j=0;j<i;j++){

                                   System.out.print(j+" ");

                            }

                            //换行

               //System.out.println();

                            System.out.print(" ");

                     }

              }

}

练习:①使用嵌套的for循环打印九九乘法表

              1*1=1

              2*1=2 2*2=4

              .......

              9*1=9...............9*9=81

public class ForTest03{

       public static void main(String[] args){

              for(int i=1;i<=9;i++){//一共有9行

                     for(int j=1;j<=i;j++){//每行有i个等式

                            System.out.print(i + "*"+ j +"=" + (i*j) + " ");

                     }

                     System.out.println();

              }

       }}

②计算1-100之间所有奇数的求和。

public class ForTest04{

       public static void main(String[] args){

              /*

              int sum = 0;

              for(int i=1;i<=100;i++){

                    

                     if(i%2 != 0){

                         //奇数

              //追加

                            sum += i;

                     }

              }

              System.out.println(sum);

              */

       //加入人为因素

       //效率高.

              int sum = 0;

              for(int i=1;i<=99;i+=2){

                     sum += i;

              }

              System.out.println(sum);

       }

}

4.3.2 while 循环语句(while循环的次数是:0-N次)

while(boolean表达式){

                            java语句;

                       }

4.3.3 do-while 循环语句(该循环执行的次数是:1-N)

do{

                            java语句;

                      }while(boolean表达式);

注:①不同的循环结构之间可以相互转换

    ②while和do-while的区别:do-while程序至少会执行一次。while先判断符合条件才执行,do-while循环先执行一次再判断。

       ③死循环:

       while(true){

                     System.out.println("Test");

              }

④嵌套循环:循环结构还可以声明循环。让内层循环结构整体充当外层循环的循环体。若外层循环执行m次,内层循环执行n次,整个程序执行m*n次。

  ⑤格式:①初始化条件②循环条件③迭代部分④循环体

for(①;②;③){

              ④

}

while(②){

              ④

              ③

}

do{

              ④

              ③

}while(②);

【题目1

打印下面图形

******

******

******

for(int i = 0;i < 3;i++){

       for(int j = 0;j < 6;j++){

              System.out.print("*");

       }

       System.out.println();

}

说明:外层循环控制行数,内层循环控制列数

【题目2输出100内的质数。(两种)

法一:

class TestPrimeNumber{

       public static void main(String[] args){

              boolean flag = false;

              long start = System.currentTimeMillis();//获取系统当前的毫秒数

              for(int i = 2;i <= 100000;i++){//实现100以内的自然数的遍历

                     //如何判断i是否为一个质数

                     for(int j = 2;j <= Math.sqrt(i);j++){

                            if(i % j == 0){

                                   flag = true;

                                   break;

                            }

                     }

                     if(!flag){//if(flag == false){//System.out.println(i);}

                     flag = false;

              }

              long end = System.currentTimeMillis();

              System.out.println("所花费的时间为:" + (end - start));

              //35535--加上break10059--使用Math.sqrt():}}

法二:

class TestPrimeNumber1{

       public static void main(String[] args){

              //boolean flag = false;

              long start = System.currentTimeMillis();//获取系统当前的毫秒数

              l:for(int i = 2;i <= 100000;i++){//实现100以内的自然数的遍历

                     //如何判断i是否为一个质数

                     for(int j = 2;j <= Math.sqrt(i);j++){

                            if(i % j == 0){

                                   //flag = true;

                                   //break;

                                   continue l;}}

                     //if(!flag){//if(flag == false){

                            System.out.println(i);

                     //}

                     //flag = false;}

              long end = System.currentTimeMillis();

              System.out.println("所花费的时间为:" + (end - start));

              //35535--加上break10059--使用Math.sqrt():}}

4.2.4 无限循环结构

for(;;){

   ...

   if(  ){

       break;

   }

   ...

}

或者

while(true){

   ...

   if(  ){

       break;

   }

   ...

}

往往我们在无限循环结构内部提供循环的终止条件,使用break关键字。否则,此循环将无限制的执行下去,形成死循环!死循环是我们要避免的。

4.4 break&continue

4.4.1 break

使用switch-case结构或者循环结构中,一旦执行到break,就跳出当前循环体,默认情况下结束离它最近的一个循环。

4.4.2 continue

使用在循环结构中,一旦执行到continue,就跳出当次循环。

for(int i = 1;i <= 10;i++){

              if(i % 4 == 0){

                     //break; //123

                     continue;  //123567910

              }

              System.out.print(i);

}    

在嵌套循环中,使用带标签的breakcontinue,可通过标签指明要终止的是哪一层语句块

label:for(int i = 1;i < 5;i++){

                          for(int j = 1;j <= 10;j++){

                                 if(j % 4 == 0){

                                    //break;

                                    //continue;

                                    //break label;

                                    continue label;

                                            }

                                  System.out.print(j);

}

                           System.out.println();

}

4.4.3 return

①并非专门用于结束循环的,它的功能是结束一个方法。当一个方法执行到一个return语句时,这个方法将被结束。

②与break和continue不同的是,return直接结束整个方法,不管这个return处于多少层循环之内。

注意:

①break只能用于switch语句循环语句中。

②continue 只能用于循环语句中。

③二者功能类似,但continue是终止本次循环,break是终止本层循环。

④break、continue之后不能有其他的语句,因为程序永远不会执行其后的语句。

⑤标号语句必须紧接在循环的头部。标号语句不能用在非循环语句的前面。

原文地址:https://www.cnblogs.com/superjishere/p/11780478.html