<<2.演算子と制御文の目次
switch文
問題7(難易度:1)                            2004年11月8日
次をコンパイル、実行すると、結果はどうなりますか。次から選びなさい。
        1:  long x, y;
                2:  x = 2;
                3:  switch (x) {
                4:          case 0 :
                5:                  y = x + 1;
                6:          case 1 :
                7:                  y = x * 2;
                8:                  break;
                9:          case 2 :
              10:           case 3 :
              11:                   y = x * 3;
              12:                   break;
              13:           default :
              14:                   y = 0;
              15:   }
              16:    System.out.println(x + " " + y);
 
   A. 3
   B. 4
  C. 6
  D. 0
  E. 2行目でコンパイルエラーになる
  F. 3行目でコンパイルエラーになる
  G. 9行目で実行時エラーになる
解説 
 switch文の( )内の式は、結果がbyte、short、int、char型のいずれかでなければなりません。変数xはlong型なので、3行目でコンパイルエラーになります。


解答 F

参考 読み物Java 第5章 白黒はっきりさせよう
問題8(難易度:2)                            2004年11月9日
次をコンパイル、実行すると、結果はどうなりますか。次から選びなさい。

            1:    int x, y;
            2:    for (x = 0; x < 5; x++) {
            3:            switch (x) {
            4:                    case 0 :
            5:                            y = x + 1;
            6:                    case 1 :
            7:                            y = x * 2;
            8:                            break;
            9:                    case 2 :
          10:                    case 3 :
          11:                            y = x * 3;
          12:                            break;
          13:                    default :
          14:                            y = 0;
          15:            }
          16:            System.out.println(x + " " + y);
          17:    }



  A:0 1    B: 0 0     C: 0 0
    1 2       1 2        1 2
    2 0       2 0        2 6
    3 9       3 9        3 9
    4 0       4 0        4 0

  D:xが2のとき未定義なので、9行目で実行時エラーになる。
  E:xが4のとき未定義なので、16行目でコンパイルエラーになる。

解説
 for文で、変数xの値を0から4まで1ずつ増やしています。()内のxはint型なので前問と違いコンパイルエラーにはなりません。さあyの値がどうなるかを図で見てみましょう。


 まずxが0のときを考えます。「case 0:」でyに0+1=1が入ります。ここでbreak文がないので、そのまま「case 1:」になだれ込みます。図の青い線でどの文を実行するか示しました。xは0のままなので、yには0*2=0が入り、breakでswitch文を抜けます。よってyは0になります。
 次はxが1の場合、「case 1:」のところで1*2=2がyに入り、breakで抜けます。
 xが2の場合、「case 2:」には何もやることがありませんが、breakもありません。そこでそのまま「case 3:」に流れ、2*3=6がyに入り、breakで抜けます。
 xが4のとき、「case 4:」というのはありません。しかし「default」があるので、ここを実行し、yは0になります。
 以上から正解はC。switch文ではbreakの有無に注意しましょう。


解答 C

参考 読み物Java 第5章 白黒はっきりさせよう
問題9(難易度:2)                               2004年11月9日
次をコンパイル、実行すると、結果はどうなりますか。次から選びなさい。

            1:    int x, y;
            2:    for (x = 0; x < 5; x++) {
            3:            switch (x) {
            4:                    case 0 :
            5:                            y = x + 1;
            6:                    case 1 :
            7:                            y = x * 2;
            8:                            break;
            9:                    case 2 :
          10:                    case 3 :
          11:                            y = x * 3;
          12:                            break;
          13:            }
          14:            System.out.println(x + " " + y);
          15:    }



  A:0 1    B: 0 0     C: 0 0
    1 2       1 2        1 2
    2 0       2 0        2 6
    3 9       3 9        3 9
    4 0       4 0        4 0

  D:xが2のとき未定義なので、9行目で実行時エラーになる。
  E:xが4のとき未定義なので、14行目でコンパイルエラーになる。
解説
  問題8とちがうのは、「default:」の部分がすっぽりなくなっていることです。xが0〜3については同じですが、4の場合に行き先がなくなってしまいました。yは局所変数なので、何も値をいれずに使うことはできません。よって14行目で出力しようとして、コンパイルエラーになります。


解答 E

参考 読み物Java 第5章 白黒はっきりさせよう
<<2.演算子と制御文の目次次問題>>
Copyright (c) 2004 Nagi Imai All Rights Reserved..