第5章流程控制语句

一、 程序的结构:

 一般来说程序的结构包含有下面三种:

1、顺序结构
2、选择结构
3、循环结构

二、顺序结构

 程序至上而下逐行执行,一条语句执行完之后继续执行下一条语句,一直到程序的末尾

 

三、选择结构

选择结构是根据条件的成立与否,再决定要执行哪些语句的一种结构

3.1 、IF语句--单分支结构

if (判断条件){
语句1 ;
语句2 ;
}
 /*
if语句:
编写格式

if(条件){
if语句的执行体
}
条件: 结果必须是布尔类型 1==1 true||false
执行体: 当if中的条件为true的时候,执行大括号中的执行体
if条件是false的时候,什么也不做
*/
还有一种省略大括号的写法如下所示:
public class IfDemo{
    public static void main(String[] args){
          int i = 5 ;
          //对变量i进行if判断此处省略大括号
          if(i<8)System.out.println("hello");
          System.out.println(i);
    }
}

示例一、 比较2个整型变量的大小

package pb.test;
public class test4 {

    public static void main(String[] args) {
        int x = 3; 
        int y = 10;          //定义2个整型变量,x,y
        System.out.println("=======开始比较=======");
        if(x>y){
            System.out.println("x比y大!");
        }
        if(x<y){
            System.out.println("x小于y!");
        }
        if(x==y){
            System.out.println("x等于y!");
        }
        System.out.println("=======比较完成=======");

    }

}

3.2、if...else语句--双分支结构

if (判断条件){

语句主体1 ;
}else{
语句主体2;
}

示例二、判断一个数字是奇数还是偶数

当if中的条件为true,执行if的执行体
当if中的条件为false,执行else的执行体

package pb.test;

public class test5 {

    public static void main(String[] args) {
        int x=3;           //定义大中型变量x
        if(x%2==0){             //如果余数为0则是偶数
            System.out.println("x是偶数");
        }else{                   //如果余数不为0则是奇数
            System.out.println("x是奇数");
        }

    }

}

 

 3.3、if…else if…else语句 --多分支结构 (多条件判断效率比较高)

如果需要在if..else里判断多个条件时,就需要if..else if … else语句了,其格式如下:

if (条件判断1){
语句主体1 ;
}else if (条件判断2){
语句主体 2 ;
}
… // 多个else if()语句
else{
语句主体3 ;
}
 
/*
   if  else if else 语句
   适合在程序中,实现多条件的判断
   编写格式:
     if(条件){
         if 执行体
     }else if(条件){
         if 执行体
     }else if(条件){
         if 执行体
     }else{
         else的执行体
     }
     当if中的条件是true,执行if执行体
     if中的条件是false,执行else执行体
     一个语句中,包含多个 if , 只要有1个if的条件是true,其他的代码,不在执行
*/

示例四、

package pb.test;

public class test6 {

    public static void main(String[] args) {
        int x=3;
        if(x==1){
            System.out.println("x的值是1!");
        }else if(x==2){
            System.out.println("x的值是2!");
        }else if(x==3){
            System.out.println("x的值是3!");
        }else{
            System.out.println("x的值不是1,2,3 中的一个!");
        }

    }

}

  

if…else if…else语句用于对多个条件进行判断,进行多种不同的处理。例如,对一个学生的考试成绩进行等级的划分,如果分数大于80分等级为优,否则,如果分数大于70分等级为良,

否则,如果分数大于60分等级为中,否则,等级为差。if…else if…else语句具体语法格式如下:

 

if (判断条件1) {
    执行语句1
} else if (判断条件2) {
    执行语句2
}
...
else if (判断条件n) {

执行语句n

} else {

执行语句n+1

}

 

上述格式中,判断条件是一个布尔值。当判断条件1true时,if后面{}中的执行语句1会执行。当判断条件1false时,会继续执行判断条件2,如果为true则执行语句2,以此类推,如果所有的判断条件都为false,则意味着所有条件均未满足,else后面{}中的执行语句n+1会执行。if…else if…else语句的执行流程如下图所示。

图1-1 if…else if…else语句的流程图

接下来通过一段代码,来实现对学生考试成绩进行等级划分的程序,IfDemo03.java


 // 当if中的条件是true,执行if执行体
 //if中的条件是false,执行else执行体
 // 一个语句中,包含多个 if , 只要有1个if的条件是true,其他的代码,不在执行
public class IfDemo03 {
    public static void main(String[] args) {
        int grade = 75; // 定义学生成绩
        if (grade > 80) {
            // 满足条件 grade > 80
            System.out.println("该成绩的等级为优");
        } else if (grade > 70) {
            // 不满足条件 grade > 80 ,但满足条件 grade > 70
            System.out.println("该成绩的等级为良");
        } else if (grade > 60) {
            // 不满足条件 grade > 70 ,但满足条件 grade > 60
            System.out.println("该成绩的等级为中");
        } else {
            // 不满足条件 grade > 60
            System.out.println("该成绩的等级为差");
        }
} }

上述代码中,定义了学生成绩grade75。它不满足第一个判断条件grade>80,会执行第二个判断条件grade>70,条件成立,因此会打印“该成绩的等级为良”。

上面的代码也可以使用if 语句来实现但是效率低下如下代码所示

/*
          执行效率低
        if( grade > 80){
            //优
        }
        
        if( grade > 70 && grade < 80){
            //良
        }
        
        if( grade > 60){
            //中
        }*/

3.4、三目运算符

使用三目运算符时,操作数有3个,其格式如下:

变量 = 条件判断?表达式1:表达式2
根据条件的成立与否,来决定结果为“:”前或“:”后的表达式,如果条件判断为true,则执行表达式1,为false则执行表达式2

例如求两个数xy中的较大者,如果用if…else语句来实现,具体代码如下:

int x = 0;
int y = 1;
int max;
if (x > y) {
    max = x;
} else {
    max = y;
}

上面的代码运行之后,变max的值为1。其中3-8行的代码可以使用下面的三元运算来替换。

int max = x > y ? x : y;

实例二

/*
   if语句和三元运算符的替换
   要求: 已经知道两个数,计算最大值
   两个整数,比较大小
   
   使用if还是三元
     判断条件多,使用if
     三元,必须有结果的, if 可以没有结果的
*/
public class IfElseDemo_1{
    public static void main(String[] args){
        int i = 15;
        int j = 6;
        //使用if语句,判断出最大值
        if(i>j){
            System.out.println(i+" 是最大值");
        }else{
            System.out.println(j+" 是最大值");
        }
        
        //使用三元运算实现
        int k = i>j ? i : j;
        System.out.println(k+" 是最大值");
    }
}

 

示例三、求出2个数字中的最大值

public static void main(String[] args) {
        //定义变量来保存最大值
        int max=0;
        //定义2个变量
        int x=3;
        int y=10;
        //使用3目运算判断如果x>y则,max=x,否则max=y;
        max=x>y?x:y;
        System.out.println("max为: "+max);

    }

四、Switch结构

要在许多的选择条件中找到并执行其中一个符合判断条件的语句时,除了可以使用if..else不断地判断之外,也可以使用另一种更方便的方式即多重选择——switch语句,语法格式:

switch (表达式){

case 选择值1 : 语句主体 1 ;        break ;
case 选择值2 : 语句主体 2 ;                 break ;
…….
case 选择值n : 语句主体 n ;                break ; default:  语句主体 ;
}
 
 
 

1.switch-case注意事项:

    switch(A),括号中A的取值只能是整型或者可以转换为整型的数值类型,比如byte、short、int、char、还有枚举;需要强调的是:long和String类型是不能作用在switch语句上的。

     case B:C;case是常量表达式,也就是说B的取值只能是常量(需要定义一个final型的常量,后面会详细介绍原因)或者int、byte、short、char(比如1、2、3、200000000000(注意了这是整型)),如果你需要在此处写一个表达式或者变量,那么就要加上单引号; case后的语句可以不用大括号,就是C不需要用大括号包裹着;

     default就是如果没有符合的case就执行它,default并不是必须的.

标准类型

示例五、判断学生成绩,并给于评分,90~100分,A级大于80分,B级,大于70分,输出C级,大于60分,D级,低于60分输出E级

package pb.test;

public class test7 {

    public static void main(String[] args) {
       int score = 75;   //声明学生分数
       switch (score/10){
       case 10:
       case 9:
         System.out.println("A级");
       break;
       case 8:
           System.out.println("B级");
           break;
       case 7:
           System.out.println("C级");
           break;
       case 6:
           System.out.println("D级");
           break;
       default:
           System.out.println("E级");
           break;
       }

    }

}

结果:C级

还是上面的如果不加break;就会出现穿透现象

如果没有break语句,那么就会从表达式的值相匹配的case标签处开始执行,一直执行到switch语句的末尾,

这种从其中的一个case处开始,忽略后面的值的匹配,直接运行case的内容的现象就是穿透的现象。

 

package pb.test;

public class test7 {

    public static void main(String[] args) {
       int score = 75;   //声明学生分数
       switch (score/10){
       case 10:
       case 9:
         System.out.println("A级");
     
       case 8:
           System.out.println("B级");
           
       case 7:
           System.out.println("C级");
        
       case 6:
           System.out.println("D级");
        
       default:
           System.out.println("E级");
        
       }

    }

}

 

结果:C级,D级,E级

 

 

 
 

 

 

 

posted @ 2018-01-03 17:08  javaobject  阅读(338)  评论(0编辑  收藏  举报