【骚全带你学Java---八、流程控制语句】

duwenquan-方形LOGO.png

java的流程控制语句包含条件语句和循环语句

一.什么是流程控制语句?

·流程控制语句:可以控制程序的执行流程。

二.流程控制语句的分类

  • 1·顺序结构
      顺序结构概述: 是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。

总的来说:写在前面的先执行,写在后面的后执行

  • 2·选择结构
      选择结构 也被称为分支结构。

选择结构有特定的语法规则,代码要执行具体的逻辑运算进行判断,逻辑运算的结果有两个,所以产生选择,按照不同的选择执行不同的代码。

Java语言提供了两种选择结构语句 if语句 switch语句。

     2.1 if语句有三种格式(选择结构)

① if语句第一种格式:

  if(关系表达式) {

    语句体

  }

执行流程: 首先判断关系表达式看其结果是true还是false

如果是true就执行语句体

如果是false就不执行语句体

【骚全带你学Java---八、流程控制语句】_第1张图片
流程控制体1.png

注意:

关系表达式无论简单还是复杂,结果必须是boolean类型

if语句控制的语句体如果是一条语句,大括号可以省略;如果是多条语句,就不能省略。建议永远不要省略。

一般来说:有左大括号就没有分号,有分号就没有左大括号  例如:

int b = 100;
if(b != 100); //这里其实是有语句体的,只不过是空语句体。

//代码块
{
System.out.println("b的值是100");
System.out.println("over");
}

② if语句第二种格式:


  if(关系表达式) {

    语句体1;

  }else {

    语句体2;

  }

执行流程: 首先判断关系表达式看其结果是true还是false

如果是true就执行语句体1

如果是false就执行语句体2

【骚全带你学Java---八、流程控制语句】_第2张图片
流程语句2.png

注意:else后面是没有比较表达式的,只有if后面有。

三元运算符实现的,都可以采用if语句实现。反之不成立。
什么时候if语句实现不能用三元改进呢?
  当if语句控制的操作是一个输出语句的时候就不能。
  为什么呢?因为三元运算符是一个运算符,运算符操作完毕就应该有一个结果,而不是一个输出。

class IfDemo4 {
  public static void main(String[] args) {
    //获取两个数据的最大值
    int a = 10;
    int b = 20;

    //用if语句实现
    int max1;
    if(a > b) {
      max1 = a;
    }else {
      max1 = b;
    }
    System.out.println("max1:"+max1);

    //用三元改进
    int max2 = (a > b)? a: b;
    System.out.println("max2:"+max2);
    System.out.println("----------");

    //判断一个数据是奇数还是偶数,并输出是奇数还是偶数
    int x = 100;

    if(x%2 == 0) {
      System.out.println("100是一个偶数");
    }else {
      System.out.println("100是一个奇数");
    } 

    //用三元改进;这种改进是错误的。
    //String s = (x%2 == 0)?System.out.println("100是一个偶数");:System.out.println("100是一个奇数");;
   }
 }

③ if语句第三种格式:

  if(关系表达式1) {

    语句体1;

  }else if (关系表达式2) {

    语句体2;

  } …

  else {

    语句体n+1;

  }

执行流程: 首先判断关系表达式1看其结果是true还是false

如果是true就执行语句体1

如果是false就继续判断关系表达式2看其结果是true还是false

如果是true就执行语句体2

如果是false就继续判断关系表达式…看其结果是true还是false

如果没有任何关系表达式为true,就执行语句体n+1。

【骚全带你学Java---八、流程控制语句】_第3张图片
第三种语句体.png

④ 嵌套 if 语句

只有当外层 if 的条件成立时,才会判断内层 if 的条件。

 语法:
if(条件1){
   if(条件2){
代码块1
  }else{
代码块2
}
}else{
代码块3
}

执行过程:


【骚全带你学Java---八、流程控制语句】_第4张图片
流程语句4.jpg

示例代码:

String today="周末";
String weather="晴";
if(today.equals("周末")){
 if(weather.equals("晴")){
   System.out.print("去室外游乐场玩");
   }else{
  System.out.println("去室内游乐场玩");
   }
}else{
System.out.println("去上班吧还是");
}

2.2 switch语句(选择结构)

switch语句格式:

  switch(表达式) {

    case 值1:

      语句体1;

      break;

    case 值2:

      语句体2;

      break;

     …

    default:

      语句体n+1;

      break;

  }

格式解释:

switch表示这是switch语句

表达式的取值:byte,short,int,char

JDK5以后可以是枚举

JDK7以后可以是String

case后面跟的是要和表达式进行比较的值

语句体部分可以是一条或多条语句

break表示中断,结束的意思,可以结束switch语句

default语句表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似。

执行流程:

首先计算出表达式的值

其次,和case依次比较,一旦有对应的值,就会执行

相应的语句,在执行的过程中,遇到break就会结束。

最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。

示例代码:

int num=1;
switch(num){
      case 1:
       System.out.printlb("奖励iPhone1台");
       break;
     case 2:
       System.out.printlb("奖励帕拉梅拉一台");
       break;
    case 3:
       System.out.printlb("奖励奔驰G500一台");
       break;
    default:
       System.out.printlb("奖励杨柳春风别墅一套");
}

不得不说的几点小秘密:
1、 switch 后面小括号中表达式的值必须是整型或字符型
2、 case 后面的值可以是常量数值,如 1、2;也可以是一个常量表达式,如 2+2 ;但不能是变量或带有变量的表达式,如 a * 2
3、 case 匹配后,执行匹配块里的程序代码,如果没有遇见 break 会继续执行下一个的 case 块的内容,直到遇到 break 语句或者 switch 语句块结束:

int num=1;
switch(num){
      case 1:
       System.out.printlb("奖励iPhone1台");
     case 2:
       System.out.printlb("奖励帕拉梅拉一台");
    case 3:
       System.out.printlb("奖励奔驰G500一台");
    default:
       System.out.printlb("奖励杨柳春风别墅一套");
}
//运行结果是:
/**
奖励iPhone1台
奖励帕拉梅拉一台
奖励奔驰G500一台
奖励杨柳春风别墅一套
**/

4、 可以把功能相同的 case 语句合并起来,如

case1:
case2:
System.out.println("奖励帕拉梅拉一台");

5、 default 块可以出现在任意位置,也可以省略

  • 3·循环结构
    循环语句的组成
      初始化语句:
        一条或者多条语句,这些语句完成一些初始化操作。
      判断条件语句:
        这是一个boolean 表达式,这个表达式能决定是否执行循环体。
      循环体语句:
        这个部分是循环体语句,也就是我们要多次做的事情。
      控制条件语句:
        这个部分在一次循环体结束后,下一次循环判断条件执行前执行。通过用于控制循环条件中的变量,使得循环在合适的时候结束。
    3.1 Java循环语句 for

for循环语句格式:

  for(初始化语句;判断条件语句;控制条件语句) {
    循环体语句;
  }

执行流程:
  A:执行初始化语句
  B:执行判断条件语句,看其结果是true还是false
    如果是false,循环结束。
    如果是true,继续执行。
  C:执行循环体语句
  D:执行控制条件语句
  E:回到B继续

【骚全带你学Java---八、流程控制语句】_第5张图片
for循环语句.png

注意事项:
A:判断条件语句无论简单还是复杂结果是boolean类型。
B:循环体语句如果是一条语句,大括号可以省略;如果是多条语句,大括号不能省略。建议永远不要省略。
C:一般来说:有左大括号就没有分号,有分号就没有左大括号

需要留心的几个小细节:

1、 for 关键字后面括号中的三个表达式必须用 “;” 隔开,三个表达式都可以省略,但 “;” 不能省略。
a. 省略 “初始化语句”,可以在 for 语句之前由赋值语句进行变量初始化操作,如:

int i=0;//循环变量i在for语句之前赋值
for(;i<10;i++){//省略初始化变量
 System.out.println("我想要帕拉梅拉");
}

b. 省略 “判断条件语句”,可能会造成循环将一直执行下去,也就是我们常说的“死循环”现象,如:


for(int i=0;;i++){//省略循环条件
 System.out.println("我想要帕拉梅拉");
}

在编程过程中要避免“死循环”的出现,因此,对于上面的代码可以在循环体中使用 break 强制跳出循环(关于 break 的用法会在后面介绍)。
c. 省略 “控制条件语句”,可以在循环体中进行循环变量的变化,如:


for(int i=0;i<10;){//省略循环条件
 System.out.println("我想要帕拉梅拉");
 i++;//在循环体中改变变量i的值
}

2、 for 循环变量初始化和循环变量变化部分,可以是使用 “,” 同时初始化或改变多个循环变量的值,如:

for(int i=0,j=5; i<=5;i++;j--){
System.out.print(i+"+"+j+"="+(i+j));
}
// 代码中,初始化变量部分同时对两个变量 i 和 j 赋值,循环变量变化部分也同时对两个变量进行变化,运行结果:
/**
1+5=6
2+4=6
3+3=6
4+2=6
5+1=6
**/

3、 循环条件部分可以使用逻辑运算符组合的表达式,表示复杂判断条件,但一定注意运算的优先级,如:

for(i=0;i<10&&i != 5;i++){
System.out.println(i);
}
//    代码中,必须同时满足变量 i 小于 10 ,并且 i 不等于 5 时才会进行循环,输出变量 i 的值。(运算结果:1.2.3.4)到5截止

3.2 Java循环语句 while
while循环语句格式:

 // 基本格式
    while(判断条件语句) {
      循环体语句;
    }
  //扩展格式
    初始化语句;
    while(判断条件语句) {
      循环体语句;
      控制条件语句;
     }

//无限循环:   

  while(true){  } 

执行流程:


【骚全带你学Java---八、流程控制语句】_第6张图片
while.png

补充:for循环语句和while循环语句可以等价转换,但还是有些小区别的

使用区别:

控制条件语句所控制的那个变量,在for循环结束后,就不能再被访问到了,而while循环结束还可以继续使用,如果你想继续使用,就用while,否则推荐使用for。

原因是for循环结束,该变量就从内存中消失,能够提高内存的使用效率。

场景区别:
  for循环适合针对一个范围判断进行操作
  while循环适合判断次数不明确操作

3.3 Java循环语句 do...while

do…while循环语句格式:
  //基本格式
    do {
      循环体语句;
    }while((判断条件语句);
  //扩展格式
    初始化语句;
    do {
      循环体语句;
      控制条件语句;
    } while((判断条件语句);

执行流程:

1,先执行一遍循环体语句和控制条件语句,然后执行 判断条件语句 判断循环条件是否成立
2,如果条件成立,继续执行1、2步骤,直到循环条件不成立为止。

特点: 先执行,后判断


【骚全带你学Java---八、流程控制语句】_第7张图片
dowhile.png

三种循环的区别:

1> do...while循环至少执行一次循环体;而 for , while循环必须先判断条件是否成立,然后决定是否执行循环体语句。

2> 优先考虑for,其次考虑while,最后考虑do...while

3> do...while循环以 ; 做结束,其它的循环以 { } 做结束。

死循环的注意事项:
1> 缺失控制条件语句 会造成死循环
2> 两种最简单的死循环格式

  while(true){...}
  for(; ;){...}

循环嵌套:循环语句的循环体本身 是一个循环语句。

Java循环跳转语句 break
生活中,我们经常会因为某些原因中断既定的任务安排。在 Java 中,我们可以使用 break 语句退出指定的循环,直接执行循环后面的代码。
例如,使用循环输出 1--10的数值,其中,如果数值大于 2 ,并且为 3 的倍数则停止输出。示例代码:

public static void main (String[] args){
   for(int i=0;i<=10;i++){
  //判断i>2,且为3的倍数, 
      if(i>2&&i%3==0){
         break;//通过break结束循环,执行循环后的语句
   }
  System.out.println(i);
}
System.out.println("循环结束了");
}

运行结果:1 2 结束啦

Java循环跳转语句 continue
continue 的作用是跳过循环体中剩余的语句执行下一次循环。

例如,打印 1--10 之间所有的偶数,示例代码:

for (int i=0;i<=10;i++){
//判断i是否为偶数
if(i%2!=0){
continue;//用过continue结束本次循环,直接进入下次循环
}
System.out.println(i);
}

运行结果:2.4.6.8.10

扩展:
return和break以及continue的区别
return是结束方法
break是跳出循环
continue是终止本次循环继续下次循环

你可能感兴趣的:(【骚全带你学Java---八、流程控制语句】)