选择结构

最基本的程序结构,按照代码编写的顺序,从上到下执行。根据要完成的功能,把这些工作编写成代码序列,然后按照这样的顺序执行就可以了。

    例:下面的代码输出数字15       
              System.out.println(1);
              System.out.println(2);
              System.out.println(3);
              System.out.println(4);
              System.out.println(5);
    程序运行的时候,先执行第一行,然后第二行……直到执行完所有行。
    除了这种顺序结构之外,还有选择结构和循环结构。本次内容介绍选择结构,下次介绍循环结构。
选择结构
    在程序执行的过程中,会根据特定的条件选择执行某些语句,例如要计算两个整型变量ab的最大值,有可能是a,也有可能是b,这时候需要根据ab的关系来选择把a的值作为最大值,还是把b的值作为最大值。
选择结构包括两个:ifswitch
1. if语句
        if语句就是在满足一定条件的时候,会执行一些语句。
    基本结构:
if(条件表达式)
{
   语句
}
    条件表达式的结果必须是boolean类型的值,要执行的语句可以是多条,每条语句以分号结束即可。
如果条件表达式的值为true,将执行括号中的语句。如果条件表达式的值为false,则不会执行括号中的语句。
【例】求ab的最大值。
// 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都可以是多行,如果只有一行,则相应的括号可以省略。
    例:使用ifelse,完成上面的求最大值的功能。
    使用下面的代码替换上面例子的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的值可能是1234,如果a1,则输出“进行加法运算”,a2,则进行减法运算,a3,则进行乘法运算,a4,则进行除法运算。
// 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接口的类型。不能使用longfloatdouble等。
(2)            case匹配成功,只确定程序的入口。
    要完成上面的功能,需要在每个case语句之后添加一个breakbeak语句可以跳出选择结构,不再执行后面的代码,修改后的代码如下:
【例】
// 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语句,都要把最常用的情况放在最前面,因为这样平均匹配次数就少了,如果把最常出现的选项放在了最后,这样每次都要进行几乎所有的匹配。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值