本文へスキップ

技術士試験(情報工学部門)・情報技術者試験。ファーストマクロ。


Since 2016.4.19

平成26年度 技術士第一次試験問題【専門科目】

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 = new B();
  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; ・・・1が返る。

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

V−3 目次 V−5