购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.6 流程控制语句

程序通过流程控制语句决定运行时的走向,并完成特定的任务。在默认情况下,系统按照语句的先后顺序依次执行,这就是所谓的顺序结构。顺序结构学习起来虽然简单,但在处理复杂问题时往往捉襟见肘。为此,在计算机编程语言中又出现了分支结构、循环结构和跳转结构。

本节主要对分支结构、循环结构和跳转结构中涉及的流程控制语句进行介绍。

2.6.1 分支语句

分支语句提供一种机制,使得程序可以根据表达式结果或者变量状态选择不同的执行路径。它解决了顺序结构不能判断的缺点。

Java提供两种选择语句:if语句和switch语句。它们也被称为条件语句或选择语句。

1.if语句

if语句的语法格式如下。


  if (条件表达式){
      语句块;
  }

  

上述语法格式表达的意思是,如果if关键字后面的表达式成立,那么程序就执行语句块,其执行流程如图2-8所示。

图2-8 if语句执行流程图

当if后面的条件表达式为true时,则执行紧跟其后的语句块;如果条件表达式为false,则执行程序中if语句后面的其他语句。语句块中如果只有一个语句,可以不用{}括起来,但为了增强程序的可读性最好不要省略。

【例2-15】通过键盘输入两个整数,输出其中较大的一个。


  import java.util.Scanner; //导入Scanner类
  public class MaxNum {
      public static void main(String[] args) {
           Scanner input = new Scanner(System.in); //构造Scanner对象
           int num1,num2,max;
           System.out.println("请输入两个整数:");
           num1 = input.nextInt(); //从键盘输入一个整数
           num2 = input.nextInt();
           max = num1;
           if(num2 > max) {
           max = num2;
           }
           System.out.println(num1+"和"+num2+"的最大值是:"+max);
      }
  }

  

程序执行结果如图2-9所示。

图2-9 例2-15的运行结果

2.if-else语句

if语句后面可以跟else语句,if-else语句的语法格式如下。


  if (条件表达式){
      语句块1;
  }else{
      语句块2;
  }

  

上述语法表达的意思是,如果if关键字后面的表达式成立,那么程序就执行语句块1,否则执行语句块2。其执行流程如图2-10所示。

图2-10 if-else语句执行流程图

【例2-16】if-else应用举例。

功能实现: 通过键盘输入一个整数,判断该整数是否大于或等于18,如果大于或等于18输出“成年人”,否则输出“未成年人”。

程序执行结果如图2-11所示。

图2-11 例2-16的运行结果

3.if-else嵌套语句

if-else嵌套语句是功能强大的分支语句,可以解决几乎所有的分支问题。if-else嵌套语句的语法格式如下。


  if (条件表达式1){
      if (条件表达式2){
           语句块1;
      }else{
           语句块2;
      }
  }else{
      if (条件表达式3){
           语句块3;
      }else{
           语句块4;
      }
  }

  

其执行流程如图2-12所示。

图2-12 if-else嵌套语句执行流程图

【例2-17】通过键盘输入两个整数,比较它们的大小。

功能实现: 通过嵌套的if-else语句判断两个整数的大小,并根据情况输出不同内容。

程序执行结果如图2-13所示。

图2-13 例2-17的运行结果

Java语言中除了嵌套的if语句可以实现多分支结构外,switch语句也可以实现多分支结构,也称为开关语句。

4.switch语句

switch语句是多分支的开关语句。它的一般格式定义如下(其中break语句是可选的)。


  switch(表达式){
      case      值1:
                语句块1;
                break;
      case      值2:
                语句块2;
                break;
      …
      case      值n:
                语句块n;
                break;
      default:
                语句块n+1;
    }

  

其中,switch、case、break是Java的关键字。switch语句的功能是判断表达式的值与一系列值中某个值是否相等,每个值称为一个分支。

switch语句有如下几个规则。

· switch后面括号中表达式的值可以是byte、short、int或者char。从Java 7开始,表达式的值也可以是字符串String类型。

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

· case语句中的值的数据类型必须与变量的数据类型相同,而且只能是常量。

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

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

· switch语句可以包含一个default分支,该分支一般是switch语句的最后一个分支(可以在任何位置,但建议在最后一个)。default在没有case语句的值和变量值相等的时候执行。default分支不需要break语句。

【例2-18】利用switch语句处理表达式中的运算符,并输出运算结果。

程序执行结果如图2-14所示。

图2-14 例2-18的运行结果

如果case语句块中没有break语句,匹配成功后,从当前case开始,后续所有case的值都会输出。

【例2-19】case后面不带break的例子。

程序运行结果如图2-15所示。

图2-15 例2-19的运行结果

2.6.2 循环语句

循环语句的作用是反复执行一段代码,直到满足特定条件为止。Java语言中提供的循环语句主要有三种,分别是while语句、do-while语句、for语句。在Java 5中引入了一种主要用于数组的增强型for循环,具体用法在介绍数组时讲解。

1.while语句

while语句的语法格式如下。


  while(条件表达式){
      语句块;
  }

  

执行while循环时,首先判断“条件表达式”的值,如果为true,则执行语句块。每执行一次语句块,都会重新计算条件表达式的值。如果为true,则继续执行语句块,直到条件表达式的值为false时结束循环。

while语句执行流程如图2-16所示。

图2-16 while语句执行流程图

【例2-20】利用while语句求10个整数的和,并输出运算结果。

程序执行结果如图2-17所示。

图2-17 例2-20的运行结果

2.do-while语句

do-while语句的格式如下。


  do{
      语句块;
  }while(条件表达式);

  

do-while循环与while循环的不同在于:它先执行语句块,然后再判断条件表达式的值。如果为true则继续执行语句块,直到条件表达式的值为false为止。因此,do-while语句至少要执行一次语句块。

do-while语句的执行流程如图2-18所示。

图2-18 do-while语句执行流程图

【例2-21】利用do-while语句输出整数n的位数。

程序执行结果如图2-19所示。

图2-19 例2-21的运行结果

3.for语句

for语句是一种功能最强、使用最广泛的循环语句。for语句的循环次数是在执行前就确定的。for语句的语法格式如下:


  for(表达式1;表达式2;表达式3){
      语句块;
  }

  

for语句中3个表达式之间用“;”分开,他们的具体含义如下。

表达式1:初始化表达式,通常用于给循环变量赋初值。

表达式2:条件表达式。它是一个布尔表达式,只有值为true时才会继续执行for语句中的语句块。

表达式3:更新表达式,用于改变循环变量的值,避免死循环。

for语句的执行流程如图2-20所示。

①循环开始时,首先计算表达式1,完成循环变量的初始化工作。

②计算表达式2的值,如表达式2的值为true,则执行语句块,否则不执行语句块,跳出循环语句。

③执行完一次循环后,计算表达式3,改变循环变量的状态。

④转入②继续执行。

图2-20 for语句执行流程图

【例2-22】利用for语句求n个整数的最大值。

程序执行结果如图2-21所示。

图2-21 例2-22的运行结果

4.循环语句嵌套

所谓循环语句嵌套就是循环语句的循环体中包含另外一个循环语句。Java语言支持循环语句嵌套,如for循环语句嵌套,while循环语句嵌套,也支持二者的混合嵌套。

【例2-23】利用for循环语句嵌套打印九九乘法表。

程序执行结果如图2-22所示。

图2-22 例2-23的运行结果

2.6.3 跳转语句

跳转语句用来实现循环语句中的执行流程转移。在前面学习switch语句时,用到的break语句就是一种跳转语句。在Java语言中,经常使用的跳转语句主要包括break语句和continue语句。

1.break语句

在Java语言中,break用于强行跳出循环体,不再执行循环体中break后面的语句。如果break语句出现在嵌套循环中的内层循环,则break的作用是跳出内层循环,即break每次只能跳出一层循环。

【例2-24】break语句应用举例。

功能实现: 利用for循环语句计算1到100之间的整数之和,当和大于500时,使用break跳出循环,并打印此时的求和结果。

程序执行结果如图2-23所示。

图2-23 例2-24的运行结果

从程序执行结果可以发现,当sum大于500时,程序执行break语句跳出循环体,不再继续执行求和运算。此时sum的值为528,而不是1~100的所有数之和5050。

2.continue语句

continue语句只能用在循环语句中,否则将会出现编译错误。当程序在循环语句中执行到continue语句时,自动结束本轮次循环体的执行,回到循环的开始处重新判断循环条件,决定是否继续执行循环体。

【例2-25】输出1~10的所有不能被3整除的自然数。

程序执行结果如图2-24所示。

从程序执行结果可以发现,1~10能被3整除的自然数在结果中均没有出现。这是因为当程序遇到能被3整除的自然数时,满足了if语句的判断条件,因执行continue语句,不再执行continue语句后面的输出语句,开始了新一轮次的循环,所以能被3整除的数没有出现在结果中。

图2-24 例2-25运行结果 +54PUdf8lWMPV4gtvSLSmzfp7uGJ1sP3eWniX/ATlMSTvQSAHYIGohK/KikxLh0X

点击中间区域
呼出菜单
上一章
目录
下一章
×