pafuイーランスクール 学んでできる

メニューへ戻る

Java 応用問題2 平成18年度春期問12 解説

問題の確認

解説
a:
処理内容を見ると、CardのstaticフィールドCard[] cardsに
の初期化処理を行っている。
選択肢をみると、
>ア private Card() {
>イ private static void init() {
>ウ private void init() {
 ->引数なしのpriveteコンストラクタ、
  引数なし、戻り値なしのstaticなpriveteメソッドinit、
  引数なし、戻り値なしのpriveteメソッドinit。
  それぞれprivateであるため、Cardクラス内の処理で使用されていなければ、
  使用される箇所がないということで定義されないはず。
  それぞれ呼び出し箇所はない。
>エ static {
 ->staticイニシャライザの宣言となり、
>クラスの初期化のとき,A(エース)~ K(キング)の位に相当する
>Cardのインスタンスを4種類のスート分生成して。Cardの配列cardsに格納する。
  staticイニシャライザは「クラスの初期化のとき」に該当する。正解。
>オ synchronized {
 ->文法的に誤り。
>カ {
 ->Cardのインスタンス生成毎に実行される処理であり、
  「クラスの初期化のとき」ではないため誤り。

b:
CardのstaticフィールドCard[] cardsの初期化処理で、
>for (int i = SPADES; i <= CLUBS; i++) {
>  for (int j = 1; j <= 13; j++) {
のループ内で
>    cards[[b]] = new Card(i, j);
と初期化を行う部分であり、
i:suit(SPADES,HEARTS,DIAMONDS,CLUBS)のトランプのマークを表す部分。
j:rank(1~13)を表す部分。suit毎にカードは13枚。
>private static final Card[] cards = new Card[13 * 4];
で、要素は0~13*4-1までに格納されている。
>イ i * 13 + j - 1
が正解。

c:
>// adjacentIndexは隣り合うカードへのインデックス値
>int adjacentIndex = [c];
の設定を行う処理であり、
>// 現在注目しているカードと隣り合うカードへの
>// インデックスを求める。
>int[] diffList = indexDiff[currentIndex % 4];
プログラム中のコメントからindexDiffは
「現在注目しているカードからの相対インデックス」
であり、外側のfor文
>for (int i = 0; i < diffList.length; i++) {
から、diffList[i]を使用してadjacentIndexを求めることが分かる。
隣り合うカードのインデックス =
 現在注目しているカードのインデックス + 現在注目しているカードからの相対インデックス
となり、
>イ currentIndex + diffList[i]
が正解。

d:
選択肢をみると、すべての選択肢はadjacentIndexとlist.size()の
関係を表している。
dの下の行で
>&& ((Card) list.get(adjacentIndex)).getRank()
という処理があり、listからadjacentIndexのメンバを
取り出すことができる条件は
>イ adjacentIndex < list.size()
が正解。(listに存在するindexの範囲は0~list.size()-1)

e:
if文は、currentIndexとadjacentIndexの間で、
rank(数字)が同じであるかどうかの判定処理であり、
条件が成り立つ場合には、listからcurrentIndexとadjacentIndexの
メンバの削除を行う必要がある。
>list.remove(adjacentIndex);
>list.remove([e]);
であるので、
>エ currentIndex
が正解。

匿名様 ご投稿

メニューへ戻る

pafuイーランスクール

pafuイーランスクール 学んでできる