<<2..演算子と制御文の目次
if文
問題12(難易度:1)                             2004年11月11日
 次をコンパイル、実行すると、変数bとcの値はどうなるでしょうか。下から選びなさい。

                        char c;
                        int a = -10, b;
                        if (a > 0) 
                            b = a;
                            c = '+';
                        else 
                            b = -a;
                            c = '-';
                        

  A.bは10、cは’+’になる。
  B.bは−10、cは’+’になる。
  C.bは10、cは’−’になる。
  D.bは−10、cは’−’になる。
  E.コンパイルエラーになる。
解説
 a>0の場合にやるべきことが2文あるのに、{}を付け忘れたため、if文は
    if(a>0)
      b=a;
でおしまいと見なされ、elseなどという文はないよとエラーになってしまいます。よって正解はE。
 括弧をつけて次のようにすれば、elseの2文が実行され、bには10、cには’−’が入ります。
                        if (a > 0) {
                                b = a;
                                c = '+';
                        } else {
                                b = -a;
                                c = '-';
                        }
 解答 E

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

                        String s = "JavaProgram";
                        char c;
                        if (s.startsWith("JA")) {
                                c = s.charAt(2);
                        } else {
                                c = s.charAt(4);
                        }
                        System.out.println(c);

  A. J と出力される
  B. a と出力される
  C. v と出力される
  D. P と出力される
  E. r と出力される
解説
 startsWithは、引数が文字列の先頭と一致するかをチェックする、Stringクラスのメソッドです。大文字小文字は区別されますので、if文の条件の結果はfalse、よってc=s.charAt(4);が実行されます。charAtは、引数の位置の文字を取り出すメソッドです。注意してほしいのは、文字列の先頭文字の位置を0と数えることです。位置4の文字は「P」になるので、正解はD。


解答 D

参考 読み物Java 第5章 白黒はっきりさせよう 第11章 似て非なるもの

問題14(難易度:2)                             2004年11月11日
次をコンパイル、実行したときの、bが4として出力されるaの値はどれでしょう。下から選びなさい。
                        int a, b;
                        for (a = 0; a <= 10; a++) {
                                if (a < 0 || a > 10) {
                                        b = 1;
                                } else if (a % 2 == 0 && a % 3 == 0) {
                                        b = 2;
                                } else if (a % 3 == 1 || a % 5 == 0) {
                                        b = 3;
                                } else if (!(a < 3)) {
                                        b = 4;
                                } else {
                                        b = 5;
                                }
                                System.out.println(a + " " + b);
                        }


  A.3と8と9
  B.8と9
  C.4と6と7
  D.2と8と9と10
  E.2と3
解説
 aを0から10までひとつずつ当てはめていって、丁寧に調べる方法があります。ここでは、条件の方から攻める別のやり方をしてみましょう。

 解説のため、各条件に番号を振ります。
  @a < 0 || a > 10
  Aa % 2 == 0 && a % 3 == 0
  Ba % 3 == 1 || a % 5 == 0
  C!(a < 3)

 順に見ていきましょう。
 まず@は、aが0より小さい または aが10より大きい、となるので、aは0から10までしか変化しないので、当てはまることはありません。
 次にAは、aを2で割った余りが0 かつ aを3で割った余りも0、となるので、2でも3でも割り切れる数になります。これは6、12、18と6の倍数ですね。12や18は範囲外なので6が対象になります。気をつけてほしいのは0です。0はどんな数で割っても、余りが0になるので、0も対象になります。→0と6
 Bは、aを3で割った余りが1 または aを5で割った余りが0、となります。前半に当てはまるのが1と4と7、後半は5と10です。間は「または」なので、両方が当てはまります。→1と4と5と7と10
 Cは、「a<3」の否定なので「a>=3」になります。3以上10以下の数ですが、@からBで該当した場合、if文を抜けてしまうので、0、1、4、5、6、7、10は除外しなければなりません。よって3、8、9。正解はA。


解答 A

参考 読み物Java 第5章 白黒はっきりさせよう
問題15(難易度:3)                               2004年11月11日
aが2のときに出力されるbの値はいくつでしょうか。下から選びなさい。

                        int a, b = 99;
                        for (a = 0; a <= 10; a++) {
                                if (a < 0 || a > 10) {
                                        b = 1;
                                } else if (a % 2 == 0 && a % 3 == 0) {
                                        b = 2;
                                } else if (a % 3 == 1 || a % 5 == 0) {
                                        b = 3;
                                } else if (!(a < 3)) {
                                        b = 4;
                                }
                                System.out.println(a + " " + b);
                        }

  A.1
  B.2
  C.3
  D.4
  E.99

解説
 問題14と比べてみてください。bに初期値99が設定されていることと、「else」で@からCのいずれにも当てはまらなかった場合の処理がなくなっています。
 
さてaが2の場合を考えましょう。先ほど見てきたように、@からCのどの条件でも2は当てはまりませんでした。「else」がなくなっているので、このif文ではbに何も代入されません。では答えは初期値の99か!と思うと、ここがひっかけ。全体をfor文で繰り返しているので、aが1のときの値がbに残っているのですね。aが1のときはbは3だったので、正解はCになります。


解答 C

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