荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: icefire (冰火), 信区: Java
标  题: [转载] java教程(五)(转寄) (转载)              DLW (转寄)
发信站: 深大荔园晨风站 (Sun Mar  1 14:45:16 1998), 转信

【 以下文字转载自 icefire 的信箱 】
【 原文由 icefire.bbs@bbs.sjtu.edu.cn 所发表 】
发信人: DLW (飞鸟), 信区: program
标  题: java教程(五)(转寄) (转载)
发信站: 饮水思源站 (Wed Aug 27 15:56:10 1997) , 转信



第 一 部 分 Java入 门

                                   第 四 章   流 控 制

                                   郁欣 孙元 王曦东 王克宏



     与 C、 C++相 同 ,Java程 序 通 过 流 控 制 来 执 行 程 序 流 ,完 成 一 定 的
 任 务 。 程 序 流 是 由 若 干
个 语 句 组 成 的 。 语 句 可 以 是 单 一 的 一 条 语 句 ( 如 c=a+b; ),也 可 以
 是 用 大 括 号 {}括 起 来 的 一 个
复 合 语 句 。

     下 面 我 们 分 别 来 介 绍 Java中 的 流 控 制 语 句 ,包 括

     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、 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语 句 的 作 用 。

     4.1.3 break语 句

     1.在 switch语 中 ,break语 句 用 来 终 止 switch语 句 的 执 行 。 使 程 序
从 switch语 句 后 的 第 一 个 语 句
开 始 执 行 。

     2.在 Java中 ,可 以 为 每 个 代 码 块 加 一 个 括 号 ,一 个 代 码 块 通 常
是 用 大 括 号 {}括 起 来 的 一 段
代 码 。 加 标 号 的 格 式 如 下 :

     BlockLabel: { codeBlock }

     break语 句 的 第 二 种 使 用 情 况 就 是 跳 出 它 所 指 定 的 块 ,并 从 紧
 跟 该 块 的 第 一 条 语 句 处 执
行 。 其 格 式 为 :

    break BlockLabel;
    例如:
     a:{……          //标记代码块a
     b:   {……             //标记代码块b
     c:         {……       //标记代码块c
                  break b;
                 ……       //will not be executed
                }
          ……          //will not be executed
          }
      ……                  /execute from here
      }


     3.与 C、 C++不 同 ,Java中 没 有 goto语 句 来 实 现 任 意 的 跳 转 ,因 为 g
oto语 句 破 坏 程 序 的 可 读 性
,而 且 影 响 编 译 的 优 化 。 但 是 从 上 例 可 以 看 出 ,Java用 break来 实 现
goto语 句 所 特 有 的 一 些 优 点
。 如 果 break后 所 指 定 的 标 号 不 是 一 个 代 码 块 的 标 号 ,而 是 一 个 语
 句 ,则 这 时 break完 全 实 现
goto的 功 能 。 不 过 应 该 避 免 这 种 方 式 的 使 用 。    (未 完 待 续 )


--
※ 来源:.饮水思源 bbs.sjtu.edu.cn.[FROM: 202.112.26.40]
--
※ 转载:.深大荔园晨风站 bbs.szu.edu.cn.[FROM: bbs.szu.edu.cn]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店