プログラミングの基礎(擬似言語のトレース)

クラス Counter は、インスタンスごとに整数型のメンバ変数 count(生成時は0)を持ち、メソッド inc() は自分の count に1を加える。Counter 型の変数には、インスタンスそのものではなく、インスタンスへの参照が入る。次のプログラムを実行した後の x の値はどれか。

Counter: c1 ← new Counter()
Counter: c2 ← c1
c1.inc()
c2.inc()
c2 ← new Counter()
c2.inc()
整数型: x ← c1.count × 10 + c2.count
  1. A11
  2. B21
  3. C33
答えと解説を見る

正解:B. 21

c2 ← c1 では参照だけが写され、c1 と c2 は同じインスタンスを指します。そのため c1.inc() と c2.inc() はどちらも同じ count を増やし、c1.count は2になります。次の c2 ← new Counter() で c2 は新しいインスタンスを指すようになり、続く c2.inc() は新しい方の count だけを1にします。x = 2 × 10 + 1 = 21 です。

  • A. c2 ← c1 でインスタンスが複製されると考えた場合の値です。実際には同じインスタンスを指します。
  • B. 正しい。c1.count = 2、新しいインスタンスの c2.count = 1 です。
  • C. c2 ← new Counter() の後も c2 が c1 と同じインスタンスを指すと考えた場合の値です。
この分野を解く 分野ページへ

関連する計算ツール

プログラミングの基礎(擬似言語のトレース)の参考書を探す PR

Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。

プログラミングの基礎(擬似言語のトレース)のほかの問題

  1. 次のプログラムで、x と y の値を入れ替えるつもりで2つの代入文を書いた。実行した後の x と y の値の組はどれか。
  2. 3つの変数の値を順に送る次のプログラムを実行した後の a、b、c の値の組はどれか。
  3. x を3倍することを繰り返す次のプログラムを実行した後の n の値はどれか。
  4. i を2ずつ増やす次の for 文を実行した後の s の値はどれか。
  5. 内側の繰返しの初期値が外側の変数 i で決まる次の二重ループを実行した後の c の値はどれか。