• 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之后不能有其他的语句,因为程序永远不会执行其后的语句。

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

  • 相关阅读:
    mysql重复数据下,删除一条重复数据
    Mysql常用函数
    鼠标滑至某位置,在鼠标旁边出现详情弹窗div
    限制文本框只能输入正数,负数,小数
    JAVA中split对空串的影响。
    《JAVA与模式》之简单工厂模式 (转)
    linux 常用命令汇总
    《JAVA与模式》之责任链模式
    《JAVA与模式》之模板方法模式 (转)
    java 异常汇总
  • 原文地址:https://www.cnblogs.com/superjishere/p/11780478.html
Copyright © 2020-2023  润新知