平成26年度 技術士第一次試験問題【専門科目】
【16】情報工学部門
V−4
次のJava言語のプログラムで、A.foo(2)を呼び出したときの戻り値はいくつか。

class A {
 static int foo(int n) {
  B x = new B();
  int r = n;
  r = x.bar(r);
  B y = newB();
  r += y.bar(r);
  return r;
 }
}

class B {
 static int p = 3;
 int x;
 public B() {
  x = p;
 }
 public int bar(int z) {
  ++p;
  return x - z;
 }
}

 @ 0  A 1  B 2  C 3  D 4



【正解】 D
以下の通り実行される。

class A {
 static int foo(
2) {
  B x = new B();  
・・・クラスBでxを定義
  int r =
2;
  r = x.bar(
2);   ・・・(以下の
*1より r = 1 )
  B y = newB(); ・・・クラスBでyを定義
  r += y.bar(
1);   ・・・(以下の*2より r = r + 3 = 1 + 3)
  return
4;
 }
}
 
4が戻り値である。

(*1)
x.bar(2)は 以下のように計算される。
 public B() {
  x = p;    ・・・
最初は static int p = 3 だから、 x = 3
 }
 public int bar(
2) {
  ++p;   
・・・1up して p = 4 になる   ・・・(1)
  return 3 -
2;  ・・・が返る。

(*2)

y.bar(
1)は、 以下のように計算される。
 public B() {
  x = p;    
・・・
(1)で、p = 4 になっているから、 x = 4
 }
 public int bar(
1) {
  ++p;   
・・・1up して p = 5
  return 4 -
1;  ・・・が返る。


EXCELのマクロのご相談なら ファーストマクロ 



V−3 目次 V−5
ファーストマクロ TOPページ