<<2.演算子と制御文の目次
2.演算子と制御文
問題1(難易度:1)                            2004年11月4日(木)
 次をコンパイル、実行すると、変数a,b,c,dの値はどうなるでしょうか?

      1:  int a = 1, b = 2, c, d;
     2:  d = a++ + ++b - --c;

  A.. a=1、b=2、c=−1、d=4
  B. a=2、b=2、c=−1、d=5
  C. a=2、b=1、c=0、d=2
  D. 2行目でコンパイルエラーになる。

                        
解説

 式が複雑な場合は、括弧を付けてみましょう
    
    d = (a++) + (++b) − (−−c);

 式に変数cが使われていますが、宣言をよく見てください。cには何も値が入っていませんね。cは明らかにメソッド内で使われる局所変数なので、何も値を入れずにいきなり使うと、コンパイルエラーになります。一生懸命計算した方のために次の問題2が用意されています。

正解 D

参考 読み物Java 第12章 一方通行と飛び出し注意

問題2(難易度:1)                            2004年11月4日(木)
次をコンパイル、実行すると、変数a,b,c,dの値はどうなるでしょうか?

      1:  int a = 1, b = 2, c = 3, d;
     2:  d = a++ + ++b - --c;

  A.. a=1、b=2、c=−1、d=4
  B. a=2、b=3、c=2、d=2
  C. a=2、b=1、c=0、d=2
  D. 2行目でコンパイルエラーになる。

解説

 式が複雑な場合は、括弧を付けてみましょう
    
    d = (a++) + (++b) − (−−c);

ここまでは問題1と同じ。今度はcの値が3と設定されているので、コンパイルエラーにはなりません。



 最初の括弧(a++)の値を考えましょう。++がaの後ろに付いているので、まずaの値1が計算に使われて、しかる後aの値が1増えるんでしたね。よってdの計算に使われるのは、1増える前のaの値1。bとcは、++や−−が変数の前に付いているので、先に変数の値を変更しておきます。よって(++b)の値は3、(−−c)の値は2になり、1+3−2でdの値は2になります。aとbは1増えて、cは1減っています。

 ++や−−の位置によって、式の値が変わってきてしまうので気をつけましょう。


正解  B

参考 読み物Java 第4章 計算しよう、そうしよう  
 <<2.演算子と制御文の目次次問題>>
Copyright (c) 2004 Nagi Imai All Rights Reserved..