解説
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章 白黒はっきりさせよう
解説
問題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章 白黒はっきりさせよう