Java的分支结构

分支结构

一般来说程序的结构包含有三种:顺序结构、选择结构、循环结构。

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

分支结构是指据条件,选择性地执行某段代码。有if…else和switch两种分支语句。

 

if语句

一个 if 语句包含一个布尔表达式和一条或多条语句。

if(布尔表达式){
   //如果布尔表达式为true将执行的语句
}

如果布尔表达式的值为 true,则执行 if 语句中的代码块,下面举个例子:

public class Test {
   public static void main(String args[]){
      int x = 5;
      if( x < 10 ){ // 5<10,布尔表达式为true,执行if语句中的代码块
         System.out.print("这是 if 语句");
      }
   }
}

if...else语句

if 语句后面可以跟 else 语句,当 if 语句的布尔表达式值为 false 时,else 语句块会被执行。

if(布尔表达式){
   //如果布尔表达式的值为true
}else{
   //如果布尔表达式的值为false
}

我们把上面的例子改成以下if...else语句示例:

public class Test {
   public static void main(String args[]){
      int x = 5;
      if( x > 10 ){ // 布尔表达式为false,执行else语句块
         System.out.print("这是 if 语句");
      }else{
         System.out.print("这是 else 语句");
      }
   }
}

if...else if...else 语句

if 语句后面可以跟 elseif…else 语句,这种语句可以检测到多种可能的情况。

使用 if,else if,else 语句的时候,需要注意下面几点:

1)if 语句至多有 1 个 else 语句,else 语句在所有的 elseif 语句之后。

2)if 语句可以有若干个 elseif 语句,它们必须在 else 语句之前。

3)一旦其中一个 else if 语句检测为 true,其他的 else if 以及 else 语句都将跳过执行。

if(布尔表达式 1){
   //如果布尔表达式 1的值为true执行代码
}else if(布尔表达式 2){
   //如果布尔表达式 2的值为true执行代码
}else if(布尔表达式 3){
   //如果布尔表达式 3的值为true执行代码
}else {
   //如果以上布尔表达式都不为true执行代码
}

我们继续把上面的例子改成以下if...elseif...else语句示例:

public class Test {
   public static void main(String args[]){
      int x = 5;
      if( x == 1 ){ // false
         System.out.print("Value of X is 1");
      }else if( x == 3 ){ // false
         System.out.print("Value of X is 3");
      }else if( x == 5 ){ // true, 这个else if语句块里的语句将被执行
         System.out.print("Value of X is 5");
      }else{
         System.out.print("这是 else 语句");
      }
   }
}

嵌套的 if…else 语句

使用嵌套的 if…else 语句是合法的。也就是说你可以在另一个 if 或者 elseif 语句中使用 if 或者 elseif 语句。

if(布尔表达式 1){
   //如果布尔表达式 1的值为true执行代码
   if(布尔表达式 2){
      //如果布尔表达式 2的值为true执行代码
   }else if(布尔表达式 3){
       //如果布尔表达式 3的值为true执行代码
   //......
   }else{
       //如果布尔表达式 2、3的值都不为true执行代码
   }
}

 

switch语句

switch 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。

当判断固定个数的值的时候,可以使用if,也可以使用switch。但是建议使用switch,效率相对较高。

switch(expression){
    case value :
       //语句
       break; //可选
    case value :
       //语句
       break; //可选
    //可以有任意数量的case语句
    default : //可选
       //语句
}

工作原理:用小括号中的变量的值依次和case后面的值进行对比,和哪个case后面的值相同了就执行哪个case后面的语句,如果没有相同的则执行default后面的语句。

我们先来看一个简单的例子:

public class Test {
   public static void main(String args[]){
      //char grade = args[0].charAt(0);
      char grade = 'B';
 
      switch(grade){
         case 'A' :
            System.out.println("优秀"); 
            break;
         case 'B' :  // true,将打印“及格”,遇到break跳出swithch语句
             System.out.println("及格");
            break;
         case 'C' : 
            System.out.println("及格");
            break;
         default :
            System.out.println("未知等级");
      }
   }
}

switch 语句注意事项:

1)switch 语句中的变量类型可以是: byte、short、int 或者 char。从 Java SE 7 开始,switch 支持字符串类型了,同时 case 标签必须为字符串常量或字面量。

2)switch 语句可以拥有多个 case 语句。每个 case 后面跟一个要比较的值和冒号。

3)case 语句中的值的数据类型必须与变量的数据类型相同,而且只能是常量或者字面常量;所有case语句中的值应是不同的。

4)当变量的值与case语句的值相等时,那么case语句之后的语句开始执行,直到break语句出现才会跳出switch语句。

5)当遇到 break 语句时,switch 语句终止。程序跳转到 switch 语句后面的语句执行。case 语句不是必须要包含 break 语句的。如果没有 break 语句出现,程序会继续执行下一条 case 语句,直到出现 break 语句。

6)default 在没有 case 语句的值和变量值相等的时候执行。

7)switch中语句没有顺序,均可以出现在任何位置。也就是说case和default的位置都是可以任意排放的。无论 default 位置在前在后,都是先判断 各个case,最后进 default。

 

在写witch语句时,break是很重要的,而case/default 的次序是次要的。

public class Test {
   public static void main(String args[]){
      //char grade = args[0].charAt(0);
      char grade = 'D';
 
      switch(grade){
         default : // 'D'与所有case值都不匹配,进入default语句
            System.out.println("未知等级");  // 执行
         case 'A' : 
            System.out.println("优秀");  // 执行,由default语句块里没有break;
            break;
         case 'B' :  // true,将打印“及格”,遇到break跳出swithch语句
             System.out.println("及格");
            break;
         case 'C' : 
            System.out.println("及格");
            break;
      }
   }
}

由上可知,当switch语句里,所有的case语句都不满足条件时,则执行default语句。下面我们来分析一下default放在不同位置时的情况:

default在switch开头:

若所有case语句都不满足条件,则执行default语句,并执行default语句之后的case语句,直到break或结束。

default在switch中间:(同上)

若所有case语句都不满足条件,则执行default语句,并执行default语句之后的case语句,直到break或结束。

default在switch末尾:

若所有case语句都不满足条件,则执行default语句,结束;若有case满足,则执行case语句直到遇到break或switch语句结束,所以default在最后一行时break可以省略不写(但是不建议省略,以求严谨)。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值