Chinaunix首页 | 论坛 | 博客
  • 博客访问: 632464
  • 博文数量: 825
  • 博客积分: 5000
  • 博客等级: 大校
  • 技术积分: 4980
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-27 14:19
文章分类

全部博文(825)

文章存档

2011年(1)

2008年(824)

我的朋友

分类:

2008-10-27 14:29:32


  与 C、 相 同 ,程 序 通 过 流 控 制 来 执 行 程 序 流 ,完 成 一 定 的 任 务 。 程 序 流 是 由 若 干
  个 语 句 组 成 的 。 语 句 可 以 是 单 一 的 一 条 语 句 ( 如 c=a+b; ),也 可 以 是 用 大 括 号 {}括 起 来 的 一 个
  复 合 语 句 。
  
  下 面 我 们 分 别 来 介 绍 中 的 流 控 制 语 句 ,包 括
  
  1.分 支 语 句 :if-else, break, switch, return.
  
  2.循 环 语 句 :while, do-while, for, continue.
  
  3.例 外 处 理 语 句 :try-catch-finally, throw
  
  最 后 我 们 简 单 介 绍 一 下 注 释 语 句 。
  
  § 4.1分 支 语 句
  
  分 支 语 句 提 供 了 一 种 控 制 机 制 ,使 得 程 序 的 执 行 可 以 跳 过 某 些 语 句 不 执 行 ,而 转 去 执
  行 特 定 的 语 句 。
  
  4.1.1条 件 语 句 if-else.
  
  if-else语 句 根 据 判 定 条 件 的 真 假 来 执 行 两 种 操 作 中 的 一 种 , 它 的 格 式 为 :
  
  if(boolean-expression)
  statement1;
  [else
  statement2;]
  
  1.布 尔 表 达 式 boolean-expression是 任 意 一 个 返 回 布 尔 型 数 据 的 表 达 式 (这 比 C、 的 限 制
  要 严 格 )。
  
  2.每 个 单 一 的 语 句 后 都 必 须 有 分 号 。
  
  3.语 句 statement1,statement2可 以 为 复 合 语 句 ,这 时 要 用 大 括 号 {} 括 起 。 建 议 对 单 一 的 语 句
  也 用 大 括 号 括 起 ,这 样 程 序 的 可 读 性 强 ,而 且 有 利 于 程 序 的 扩 充 (可 以 在 其 中 填 加 新 的 语 句
  )。 {}外 面 不 加 分 号 。
  
  4.else子 句 是 任 选 的 。
  
  5.若 布 尔 表 达 式 的 值 为 true,则 程 序 执 行 statement1,否 则 执 行 st atement2。
  
  6.if-else语 句 的 一 种 特 殊 形 式 为 :
  
  if(expression1){
  statement1
  }else if (expression2){
  statement2
  }……
  }else if (expressionM){
  statementM
  }else {
  statementN
  }
  @@@[
  else子句不能单独作为语句使用,它必须和if配对使用。else总是与离它最近的if配对
  。可以通过使用大括号{}来改变配对关系。
  7.举例:
  例4.1 比较两个数的大小,并按从小到大的次序输出。
  @@@[
  public class CompareTwo{
  public static void main( String args[] ){
  double d1=23.4;
  double d2=35.1;
  if(d2>=d1)
  System.out.println(d2+" >= "+d1);
  else
  System.out.println(d1+" >= "+d2);
  }
  }
  运行结果为:
  C:\>java CompareTwo
  
  35.1 >= 23.4
  
  例 4.2 判 断 某 一 年 是 否 为 闰 年 。
  
  闰 年 的 条 件 是 符 合 下 面 二 者 之 一 :① 能 被 4整 除 ,但 不 能 被 10 0整 除 ;② 能 被 4整 除 ,又 能 被
  100整 除 。
  
  public class LeapYear{
  public static void main( String args[] ){
  int year=1989; //method 1
  if( (year%4==0 && year%100!=0) || (year%400==0) )
  System.out.println(year+" is a leap year.");
  else
  System.out.println(year+" is not a leap year.");
  year=2000; //method 2
  boolean leap;
  if( year%4!=0 )
  leap=false;
  else if( year%100!=0 )
  leap=true;
  else if( year%400!=0 )
  leap=false;
  else
  leap=true;
  if( leap==true )
  System.out.println(year+" is a leap year.");
  else
  System.out.println(year+" is not a leap year.");
  year=2050; //method3
  if( year%4==0){
  if( year%100==0 ){
  if( year%400==0)
  leap=true;
  else
  leap=false;
  }else
  leap=false;
  }else
  leap=false;
  if( leap==true )
  System.out.println(year+" is a leap year.");
  else
  System.out.println(year+" is not a leap year.");
  }
  }
  运行结果为
  C:\>java LeapYear
  1989 is not a leap year.
  2000 is a leap year.
  2050 is not a leap year.
  
  该 例 中 ,方 法 1用 一 个 逻 辑 表 达 式 包 含 了 所 有 的 闰 年 条 件 ,方 法 2使 用 了 if-else语 句 的 特 殊
  形 式 ,方 法 3则 通 过 使 用 大 括 号 {}对 if-else进 行 匹 配 来 实 现 闰 年 的 判 断 。 大 家 可 以 根 据 程 序 来
  对 比 这 三 种 方 法 ,体 会 其 中 的 联 系 和 区 别 ,在 不 同 的 场 合 选 用 适 合 的 方 法 。
  
  4.1.2多 分 支 语 句 switch
  
  switch 语 句 根 据 表 达 式 的 值 来 执 行 多 个 操 作 中 的 一 个 ,它 的 一 般 格 式 如 下 :
  
  switch (expression){
  case value1 : statement1;
  break;
  case value2 : statement2;
  break;
  …………
  case valueN : statemendN;
  break;
  [default : defaultStatement; ]
  }
  
  1.表 达 式 expression可 以 返 回 任 一 简 单 类 型 的 值 (如 整 型 、 实 型 、 字 符 型 ),多 分 支 语 句 把
  表 达 式 返 回 的 值 与 每 个 case子 句 中 的 值 相 比 。 如 果 匹 配 成 功 ,则 执 行 该 case子 句 后 的 语 句 序
  列 。
  
  2.case子 句 中 的 值 valueI必 须 是 常 量 ,而 且 所 有 case子 句 中 的 值 应 是 不 同 的 。
  
  3.default子 句 是 任 选 的 。 当 表 达 式 的 值 与 任 一 case子 句 中 的 值 都 不 匹 配 时 ,程 序 执 行
  default后 面 的 语 句 。 如 果 表 达 式 的 值 与 任 一 case子 句 中 的 值 都 不 匹 配 且 没 有 default子 句 ,则 程
  序 不 作 任 何 操 作 ,而 是 直 接 跳 出 switch语 句 。
  
  4.break语 句 用 来 在 执 行 完 一 个 case分 支 后 ,使 程 序 跳 出 switch语 句 ,即 终 止 switch语 句 的 执 行
  。 因 为 case子 句 只 是 起 到 一 个 标 号 的 作 用 ,用 来 查 找 匹 配 的 入 口 并 从 此 处 开 始 执 行 ,对 后 面
  的 case子 句 不 再 进 行 匹 配 ,而 是 直 接 执 行 其 后 的 语 句 序 列 , 因 此 应 该 在 每 个 case分 支 后 ,要 用
  break来 终 止 后 面 的 case分 支 语 句 的 执 行 。
  
  在 一 些 特 殊 情 况 下 ,多 个 不 同 的 case值 要 执 行 一 组 相 同 的 操 作 ,这 时 可 以 不 用 break。
  
  5.case分 支 中 包 括 多 个 执 行 语 句 时 ,可 以 不 用 大 括 号 {}括 起 。
  
  6.switch语 句 的 功 能 可 以 用 if-else来 实 现 ,但 在 某 些 情 况 下 ,使 用 switch语 句 更 简 炼 ,可 读 性 强
  ,而 且 程 序 的 执 行 效 率 提 高 。
  
  7.举 例 :
  
  例 4.3.根 据 考 试 成 绩 的 等 级 打 印 出 百 分 制 分 数 段 。
  
  public class GradeLevel{
  public static void main( String args[] ){
  System.out.println("\n** first situation **");
  char grade='C'; //normal use
  switch( grade ){
  case 'A' : System.out.println(grade+" is 85~100");
  break;
  case 'B' : System.out.println(grade+" is 70~84");
  break;
  case 'C' : System.out.println(grade+" is 60~69");
  break;
  case 'D' : System.out.println(grade+" is <60");
  break;
  default : System.out.println("input error");
  }
  System.out.println("\n** second situation **");
  grade='A'; ∥creat error without break statement
  switch( grade ){
  case 'A' : System.out.println(grade+" is 85~100");
  case 'B' : System.out.println(grade+" is 70~84");
  case 'C' : System.out.println(grade+" is 60~69");
  case 'D' : System.out.println(grade+" is <60");
  default : System.out.println("input error");
  }
  System.out.println("\n** third situation **");
  grade='B'; ∥several case with same operation
  switch( grade ){
  case 'A' :
  case 'B' :
  case 'C' : System.out.println(grade+" is >=60");
  break;
  case 'D' : System.out.println(grade+" is <60");
  break;
  default : System.out.println("input error");
  }
  }
  }
  运行结果为
  C:\>java GradeLevel
  **** first situation ****
  C is 60~69
  **** second situation ****
  A is 85~100
  A is 70~84
  A is 60~69
  A is <60
  input error
  **** third situation ****
  B is >=60
  
  从 该 例 中 我 们 可 以 看 到 break
【责编:admin】

--------------------next---------------------

阅读(298) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~