基本情報技術者過去問

平成17年 午後 問12

最終更新日 2006/01/29
webmaster@tomnetwork.net

Tomのネットワーク勉強ノート
 過去問
  基本情報技術者過去問(午前・午後)
   基本情報技術者過去問 平成17年 午後 問12

問12 次のJavaプログラムの説明及びプログラムを読んで,設問1,2に答えよ。

〔プログラムの説明〕

Aを起点,Dを終点とする四つの駅A,B,c,Dからなる路線の各駅に設置され
た自動改札機の処理を模したプログラムである。この路線では片道切符(以下,切符
という)とプリベイドカード(以下,カードという)の2種類の乗草券が使用できる。
路線の運賃は駅間の距離で決められる。距離が4kmまでは120円(この運賃を初
乗り運賃という)で,それを超えると2kmごとに30円加算される。2km未満は
2 kmに切り上げる。例えば,距離が7kmのとき,運賃は180円である。

切符には,乗車駅で自動改札機を通って入場するとき,乗車駅の情報が記録される。
降車駅で自動改札機を通って出場するとき,運賃が計算され,金額が不足していると
きはゲートが閉じられ,出場できない。一度使用した切待は無効となる。この路線で
は切符を発券した駅にかかわらず, どの駅の自動改札機からでも入場し,乗車できる。
例えば,A駅で発券された切符でB駅の自動改札機から入場できる。

カードには,乗車駅で自動改札機を通って入場するとき,乗車駅の情報が記録され
る。このとき,カードの残高が0円の場合は,ゲートが閉じられ,入場できない。降
車駅で自動改札機を通って出場するとき,精算処理が行われる。すなわち,運賃が計
算され,カードの残高から引かれる。このとき,カードの残高が運賃に満たない場合
は,ゲートが閉じられ,出場できない。

クラスLineは路線を表す。メソッドgetFareは与えられた距離から運賃を計算
して返す。

クラスGateは,自動改札機を表す。クラスLineのフィールドA,B,C,Dは
Gateのインスタンスであり,それぞれA,B,C,Dの各駅に設置された自動改札機
を表す。コンストラクタ及び各メソッドは,次の処理を行う。

(1)コンストラクタは,Gateのインスタンスを生成する。最初の引数に駅名,2番
 目の引数に路線の起点であるA駅からの距離を指定する。

(2)メソッドenterは,自動改札機を通って入場するときの処理を行う。乗車券が
 適正でない場合はゲートを閉じる。入場処理が正常に行われた場合は,乗車券に乗
 車駅の情報を記録する。

(3)メソッドexitは,自動改札機を通って出場するときの処理を行う。乗車券の金
 額(残高)が不足するなど,適正でない場合はゲートを閉じる。

(4)メソッドopen及びcloseは,それぞれゲートの開閉を表すメッセージを出力
 する。

抽象クラスTicketは,この路線の乗車券を表し, このクラスを継承して切符や
カードを定義する。コンストラクタ及び各メソッドは,次の処理を行う。

(1)コンストラクタは,購入時の金額を初期値として乗車券に保持する。

(2)メソッドgetValueは,呼び出された時点での乗車券の金額(残高)を返す。

(3)メソッドadjustValueは,必要であれば精算処理を行う。

(4)メソッドdeductは,引数で指定された金額を乗車券の金額(残高)から差し引いて金額(残高)を更新する。

(5)メソッドsetOriginは,指定されたGateを乗車駅として記録する。nullが指定されたときは,乗車駅の記録を消去する。

(6)メソッドgetOriginは,記録されている乗車駅を返す。記録されていないときはnul上を返す。

クラスOneWayTicketは切符を表し,クラスPrepaidCardはカードを表す。そ
れぞれの乗車券の処理で,抽象メソッドを実装し,必要に応じてTicketのメソッ
ドをオーバライトする。

    


      

      
      


設問1 プログラム中の【    】に入れる正しい答えを,解答群の中から選べ。

aに関する解答群
    ア ticket.setOrigin (Line.A)       イ ticket.setOrigin(Line.D)
    ウ ticket.setOrigin(null)         エ ticket,setOrigin(this)
    オ ticket,setOrigin(ticket)

bに関する解答群
    ア ticket.getValue() < fare      イ ticket.getValue() <= fare
    ウ ticket.getValue() == fare     エ ticket.getValue() > fare
    オ ticket.getvalue() >= fare

cに関する解答群
    ア super()                 イ super (this)
    ウ super (value)             エ super(); this.is.value = value
    オ this(value)

設問2

この路線で,新しいタィプの乗車券を発売することになった。この乗車券は発
券した時刻から24時間以内は全駅で乗り降り自由な乗車券である。発券から24
時間経過すると出場はできるが入場はできなくなる。これに伴い,抽象クラス
TiCketを継承して新しいクラスを定義し,クラスGateには修正を加えずにこ
の乗車券をサポートしたい。このクラスのコンストラクタ及びメソッドの処理を
次の表にまとめた。表中の【      】に入れる正しい答えを,解答群の中から
選べ。ここで,解答群中のvalueは, クラスTicketのフィールドvalueで
あり,コンストラクタで初期値を設定し,値はメソッドgetValueで得るもの
とする。

   _
コンストラクタ及びメソッド 処理
コンストラクタ 【  d  】
メソッドgetValue 【  e  】
メソッドsetOrigin スーパクラスで定義されたとおり
メソッドgetOrigin スーパクラスで定義されたとおり
メソッドadjustValue 何もしない(メソッド本体が文を含まない)。
メソッドisValid 【  f  】

解答群

   ア valueが路線の最高運賃(全運賃の最大値)以上のときだけtrueを返す。それ以外はfalseを返す。
   イ valueが路線の初乗り運賃以上のときだけtrueを返す。それ以外はfalseを返す。
   ウ valueの初期値に,理論的に24時間かかっても使い切れない金額を設定する。
   エ valueの初期値に,路線の最高運賃(全運賃の最大値)を設定し,発券時刻を記録する。
   オ スーパクラスで定義されたとおり
   カ 常に0を返す。
   キ 常に路線の初乗り運賃の値を返す。
   ク 何もしない(メソッド本体が文を含まない)。
   ケ メソッドdeductを,amountを引数として呼び出す。
   コ 呼び出されたときの時刻がインスタンスに格納されている発券時刻から24時間以内のときだけtrueを返す。それ以外はfalseを返す。

Tomのネットワーク勉強ノート
 過去問
  基本情報技術者過去問(午前・午後)
   基本情報技術者過去問 平成17年 午後 問12