Java基础:第十一讲 选择结构

 

    最基本的程序结构,按照代码编写的顺序,从上到下执行。根据要完成的功能,把这些工作编写成代码序列,然后按照这样的顺序执行就可以了。
    例:下面的代码输出数字1 5        
              System.out.println(1);
              System.out.println(2);
              System.out.println(3);
              System.out.println(4);
              System.out.println(5);
    程序运行的时候,先执行第一行,然后第二行…… 直到执行完所有行。
    除了这种顺序结构之外,还有选择结构和循环结构。本次内容介绍选择结构,下次介绍循环结构。
选择结构
    在程序执行的过程中,会根据特定的条件选择执行某些语句,例如要计算两个整型变量a b 的最大值,有可能是a ,也有可能是b ,这时候需要根据a b 的关系来选择把a 的值作为最大值,还是把b 的值作为最大值。
选择结构包括两个:if switch
1. if语句
        if 语句就是在满足一定条件的时候,会执行一些语句。
    基本结构:
if( 条件表达式)
{
   语句
}
    条件表达式的结果必须是boolean 类型的值,要执行的语句可以是多条,每条语句以分号结束即可。
如果条件表达式的值为true ,将执行括号中的语句。如果条件表达式的值为false ,则不会执行括号中的语句。
【例】求a b 的最大值。
// IfTest.java
public class IfTest {
 public static void main(String[] args) {
      int a = 10;
      int b = 8;
      int max = a;
      if(a<b)
      {
          max = b;
      }
      System.out.println("最大值为:"+max);
 }
}
运行结果为:
最大值为:10
     如果括号中要执行的代码只有一行,可以不写括号,上面代码中main 方法中的代码可以改写成:
      int a = 10;
      int b = 8;
      int max = a;
      if(a<b)
          max = b;
      System.out.println("最大值为:"+max);
        if 语句还可以被用于在两组语句中选择执行一组,要么执行第一组,要么执行第二组。基本结构如下:
if( 条件表达式)
{
   语句1
}
else
{
   语句2
}
    如果条件表达式的值为true ,就执行语句1 ,否则将执行语句2 。语句1 和语句2 总会有一个被执行。语句1 和语句2 都可以是多行,如果只有一行,则相应的括号可以省略。
    例:使用if else ,完成上面的求最大值的功能。
    使用下面的代码替换上面例子的main 方法中的代码即可。
      int a = 10;
      int b = 8;
      int max;
      if(a<b)
      {
          max = b;
      }
      else
      {
          max = a;
      }
      System.out.println("最大值为:"+max);
    运行的结果与上面的相同。
        else 后面的语句本身也可以使用if 语句 这时候就会出现这样的结构
if( 条件表达式1)
{
   语句1
}
else if( 条件表达式2)
{
   语句2
}
[else{ 语句3}]
        [else{ 语句3}] 表示这部分内容可以有 也可以没有 需要根据情况而定。这种格式的作用是:如果条件表达式1 的结果为true ,执行语句1 ,如果条件表达式1 的结果为false ,而条件表达式2 的结果为true ,执行语句2 ,否则执行语句3 (如果有最后的else )。这时候完成的功能不再是在两个语句中选择执行一个,而是在多个语句中选择执行一个,这时候可以嵌套很多层。
    【例】整型变量a 的值可能是1 2 3 4 ,如果a 1 ,则输出“进行加法运算”,a 2 ,则进行减法运算,a 3 ,则进行乘法运算,a 4 ,则进行除法运算。
// IfElseTest.java
public class IfElseTest {
 public static void main(String[] args) {
      int a=3;
      if(a==1)
          System.out.println("进行加法运算");
      else if(a==2)
          System.out.println("进行减法运算");
      else if(a==3)
          System.out.println("进行乘法运算");
      else
          System.out.println("进行除法运算");
 }
}
    运行结果为
进行乘法运算
    如果改变a 的值 运行结果会发生相应的变化。
2. switch语句
        switch 语句完成的功能是在多种情况中选择一个执行。就像上面的例子,根据整型变量a 的值,输出不同的内容,也就是执行不同的语句,就可以使用switch 语句。
       switch 语句的基本结构如下:
switch( 表达式)
{
 case 1: 语句1
 case 2: 语句2
 …
 case n: 语句n
 default: 语句n+1
}
    如果表达式的值为“值1 ”,则从“语句1 ”开始执行,如果表达式的值为“值2 ”,则从“语句2 ”开始执行,如果表达式的值为“值n ”,则从“语句n ”开始执行,如果表达式的值没有与任何case 匹配,则执行default ,进行匹配的顺序是从前到后。这里的“语句1 ”、“语句2 ”、“语句n ”和“语句n+1 指的不是一条语句,可以是多条语句。
    先看下面的例子:
【例】
// SwitchTest.java
public class SwitchTest {
 public static void main(String[] args) {
      int a=2;
      switch(a)
      {
      case 1:System.out.println("进行加法运算");
      case 2:System.out.println("进行减法运算");
      case 3:System.out.println("进行乘法运算");
      case 4:System.out.println("进行除法运算");
      default:System.out.println("a的值不合法");
      }
 }
}
运行结果为
进行减法运算
进行乘法运算
进行除法运算
a的值不合法
    从运行结果上看,并没有达到预期的目的,按照预期应该只输出“进行减法运算”,也就是运行结果的第一行。为什么会得到这样的结果,是因为switch 结构中,匹配成功之后的所有代码都会执行,也就是case 表达式仅仅决定了程序的入口。如果把变量a 的类型定义成long 类型,编译会报错。所以应该注意两点:
(1)            表达式的结果可以是short 类型、byte 类型、int 类型、char 类型和实现Enumeration 接口的类型。不能使用long float double 等。
(2)            case 匹配成功,只确定程序的入口。
    要完成上面的功能,需要在每个case 语句之后添加一个break beak 语句可以跳出选择结构,不再执行后面的代码,修改后的代码如下:
【例】
// SwitchTest2.java
public class SwitchTest2 {
 public static void main(String[] args) {
      char a=2;
      switch(a)
      {
      case 1:System.out.println("进行加法运算");break;
      case 2:System.out.println("进行减法运算");break;
      case 3:System.out.println("进行乘法运算");break;
      case 4:System.out.println("进行除法运算");break;
      default:System.out.println("a的值不合法");
      }
 }
}
运行的结果为
进行减法运算
    这就是希望的结果了。
        if 语句和switch 语句都是选择结构,如果选择比较少的情况应该使用if 语句,如果选项比较多的时候应该使用switch
    另外,if 语句的条件是布尔类型,而switch 语句的条件是整数类型(包含char 类型,而不包含long 类型)和枚举类型。
    【注意】不管使用if 语句还是使用switch 语句,都要把最常用的情况放在最前面,因为这样平均匹配次数就少了,如果把最常出现的选项放在了最后,这样每次都要进行几乎所有的匹配。
 
    下一次:第十二讲 循环结构
 
    CSDN Blog http://blog.csdn.net/javaeeteacher

 

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值