第四章 控制执行流程

所有的条件语句都利用条件表达式的真假来决定执行的路径,java中不允许将一个数字作为布尔类型的值使用。


1.流程控制(判断)

if - else 是最基本的控制流程


流程控制(迭代)

  • while、do-while 和 for 用来控制循环,称他们为迭代语句 (iteration statement) ,语句会重复执行,直到其控制作用的布尔表达式 ( Booleanexpression )得到假的结果为止。
  • while() 循环,在循环开始时,会计算一次布尔表达式的值,而在下一次迭代开始前会再次计算一次。
//产生随机数,直到符合特定的条件为止
public class WhileTest{
//静态方法,调用即执行
  static boolean condition(){
  /*产生0~1之间(包括0但是不包括1)的一个double值,之后0.99比较决定返回true或者false*/
    boolean result = Math.random() < 0.99 ;
    System.out.printf(result + " . ") ;
    return result ;      
   }
   public static void main(String[] args){
     while(condition()){
      System.out.printf("Inside 'while'") ;
    }
    System.out.printf("Exited 'while'");
  }
} 
  • do-while , do-while 会比 while 多执行一次。如果条件第一次为false,while不会执行,但是do-while会执行一次。
  • for , 在第一次迭代前进行初始化,随后,每一次迭代结束后,进行某种形式的 “ 步进 ”。
  • for( initialization ; Boolean-expression ; step ) . 初始化 ( initialization ) 表达式、布尔表达式 ( Boolean-expression ) 、步进 ( step ) 都可以为空。

     public static void  main(String[] args){
          /*
          * Character.isLowerCase(c)
          * 调用isLowerCase()方法来检查问题中的是否是小写字母。
          * */
          for(char c = 0 ; c< 128 ;c++){
              if(Character.isLowerCase(c)){
                  System.out.println("value: " + (int)c + "  character: " + c);
              }
          }
      }
  • 逗号操作符,唯一用到的就是 for 循环的控制表达式,可以使用逗号分隔语句,定义多个变量,但是他们必须具有相同的类型。
  • Foreach 语法 , 使用 foreach 语法在录入代码时节省时间,阅读起来也比较方便。

    public static  void  main(String[] args){
          Random rand = new Random(47) ;
          float f[] = new float[10] ;
          for (int i = 0 ; i < 10 ;i++){
              f[i] = rand.nextFloat();
          }
          for(float x : f){
              System.out.println(x);
          }
      }

流程控制(返回)

  • return ,return关键字由两方面的用途,一方面指定一个方法返回什么值(假设他没有 void 返回值),另一方面它会导致当前的方法推出,并返回那个值。
  • breakcontinue,在任何迭代语句的主体部分,都可用 break 和 continue 控制循环的流程。其中,break 用于强制退出循环,不执行循环中剩余的语句。而 continue 则停止执行当前的迭代,然后退回循环起始处,开始下一次迭代。
  • 关于无穷循环的 while 和 for 的表达形式 ---> while(true) for(::)
  • goto是在源码级上的跳转.
  • 标签:标签是后面跟有冒号的标识符,在 java 中·,标签起作用的唯一的地方刚好是在迭代语句之前。
  • 一般的 continue 会退回最内层循环的开头(顶部),继续执行,带标签的 continue 会到达标签的位置,并重新进入紧接在那个标签后面的循环。
  • 一般的 break 会中断并跳出当前循环,带标签的 break 会中断并跳出标签所指的循环,(即使外面有双重循环)

    public static  void main(String[] args){
         int i = 0 ;
         outer:
         while(true){
             System.out.println("Outer while loop");
             while(true){
                 i++ ;
                 System.out.println(" i = " + i);
                 if(i == 1){
                     System.out.println(" continue ");
                     continue  ;
                 }
                 if(i == 3){
                     System.out.println(" continue outer");
                     continue outer ;
                 }
                 if(i == 5){
                     System.out.println(" break ");
                     break   ;
                 }
                 if(i == 7){
                     System.out.println(" break outer ");
                     break outer;
                 }
             }
         }
     }
  • switch 有时候也被称为选择语句。switch 的选择因子必须是 int 或者
    char 之类的整数值

2. 练习

  • 斐波那切数列

    import java.util.Scanner;
    
  • 递归是最简单的实现方式,但递归有很多的问题,在n的值非常大时,会占用很多的内存空间
    *
  • */
    public class For4Test9 {
    public static int Fibinacci1(int fa){

     if(fa < 0){
          return -1 ;
     }else if(fa == 0){
         return 0 ;
     }else if(fa == 1 || fa ==2){
         return 1 ;
     }else{
         return Fibinacci1(fa - 1) + Fibinacci1(fa - 2);
     }

    }
    /*
    *从上面的实现中我们定义了3个变量a、b、c其中c=a+b,然后逐步进行计算从而得到下标为n的值。

  • 既然我们可以定义变量进行存储,那么同样我们还可以定义一个数组,
  • 该数组的每一个元素即一个斐波那契数列的值,
  • 这样我们不仅能得到第n个值,还能获取整个斐波那契数列
    *
    *
  • */
    public static int Fibinacci2(int fa){

      if(fa < 0){
          return -1 ;
      }else if(fa == 0){
          return 0 ;
      }else if(fa == 1 || fa ==2){
          return 1 ;
      }else{
          int c = 0 , a= 1 , b =1  ;
          for(int i = 3 ;i <= fa ;i++){
              c = a+b;
              a = b ;
              b = c ;
          }
          return c ;
      }

    }
    /*
    *数组

  • */
    public static int Fibinacci3(int fa){
    if(fa < 0){

      return -1 ;

    }else if(fa == 0){

      return 0 ;

    }else if(fa == 1 || fa ==2){

      return 1 ;

    }else{

     int[] fibAry = new int[fa+1] ;
     fibAry[0] = 0 ;
     fibAry[1] = fibAry[2] = 1 ;
     for(int i = 3 ; i <=fa ; i++){
         fibAry[i] = fibAry[i-1] + fibAry[i-2] ;
     }
     return fibAry[fa] ;

    }
    }

    public static void main(String[] args){

      Scanner in =new Scanner(System.in);
      System.out.println("输入数字求斐波那切数列");
      int a = in.nextInt() ;
      System.out.println(Fibinacci3(a));
      in.close();

    }
    }


由本人从 Thinking in java ( java 编程思想 ) 整理而来

最后修改:2018 年 07 月 15 日
哇卡哇卡