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 が正解。 |
匿名様 ご投稿
メニューへ戻る