平成14年 春期 基本情報技術者 午後 問12
問12 Java
〔プログラムの説明〕 飛行機の利用者の種別(一般利用者,ゴールド利用者)と 利用区間からマイレージを求めて積算マイレージを計算するプログラムである。 利用者の各種別のマイレージの計算方法は,次のとおりである。 ・一般利用者: マイレージ=基準距離 ・ゴールド利用者:マイレージ=基準距離× 1.25 利用区間とその基準距離を,次表に示す。 表 利用区間と基準距離
計算したマイレージを,それまでの積算マイレージに加える。 利用者は積算マイレージを無料往復チケットに交換することができる。
プログラムは,次の五つのクラスと一つのインタフェースで構成されている。 MileageTest メソッド main をもつテスト用のクラスであり,次の処理を行う。 (1) 一般利用者とゴールド利用者のインスタンスを生成し,利用者名, 積算マイレージの情報を初期化する。 (2) 新しい積算マイレージを計算し,実行結果を出力する。 コンストラクタ MileageTest の引数は,利用者名,出発地,到着地, 無料往復チケット指定である。 無料往復チケット指定には,無料往復チケットに交換する場合は交換に必要なマイレージを 指定し,無料往復チケットに交換しない場合は 0 を指定する。 Passenger 利用者を表す抽象クラスである。
抽象メソッド addMileage は,積算マイレージを計算する。
メソッド awardTravel は,無料往復チケットの交換が可能か否かの判定を行い,
可能であれば積算マイレージから無料往復チケット交換に必要なマイレージを減算し,
不可能であれば例外処理によってメッセージを出力する。
メソッド NormalPassenger 一般利用者を表すクラスであり,積算マイレージを計算するメソッド addMileageを実装する。 GoldPassenger ゴールド利用者を表すクラスであり,積算マイレージを計算するメソッド addMileage を実装する。 NotEnoughMileageException 無料往復チケットに交換できない場合の処理を行うクラスである。 MileageServices プログラムで使用する定数を宣言しているインタフェースである。
〔プログラム〕 (行番号) 1 public class MileageTest implements MileageServices { 2 public static void main(String args[]) { 3 NormalPassenger taro = new NormalPassenger("Taro", 0); 4 GoldPassenger mark = new GoldPassenger("Mark", 100000); 5 NormalPassenger june = new NormalPassenger("June", 0); 6 GoldPassenger jiro = new GoldPassenger("Jiro", 50000); 7 new MileageTest(taro, NARITA, PARIS, 8 DOMESTIC_ROUND_TRIP); 9 new MileageTest(mark, LOSANGELES, PARIS, 10 ASIA_PACIFIC_ROUND_TRIP); 11 new MileageTest(june, PARIS, KANSAI, US_ROUND_TRIP); 12 new MileageTest(jiro, KANSAI, NARITA, 0); 13 new MileageTest(taro, PARIS, NARITA, DOMESTIC_ROUND_TRIP); 14 } 15 public MileageTest(Passenger passenger, int from, int to, 16 int awardTrip) { 17 passenger.addMileage(from, to); 18 System.out.println("\n" + passenger.getName() + 19 "'s mileage: " + passenger.getMileage()); 20 if ( != 0) 21 try { 22 passenger.awardTravel(awardTrip); 23 System.out.println("You get an award trip.\n" + 24 "Your mileage is now " + 25 passenger.getMileage() + "."); 26 } catch (NotEnoughMileageException e) { 27 System.out.println(e); 28 } 29 } 30 } 31 32 interface MileageServices { 33 final static int NARITA = 0; 34 final static int KANSAI = 1; 35 final static int LOSANGELES = 2; 36 final static int PARIS = 3; 37 final static int[][] MILEAGE = {{ 0, 300, 5400, 6200}, 38 { 300, 0, 5700, 6100}, 39 {5400, 5700, 0, 4000}, 40 {6200, 6100, 4000, 0} 41 }; 42 final static int DOMESTIC_ROUND_TRIP = 15000; 43 final static int ASIA_PACIFIC_ROUND_TRIP = 20000; 44 final static int US_ROUND_TRIP = 40000; 45 46 final static double NORMAL = 1.00; 47 final static double GOLD = 1.25; 48 } 49 50 class Passenger implements MileageServices { 51 int totalMileage; 52 String name; 53 54 (String name, int totalMileage) { 55 this.name = name; 56 this.totalMileage = totalMileage; 57 } 58 public abstract void addMileage(int from, int to); 59 public void awardTravel(int award) throws 60 NotEnoughMileageException { 61 if (award > ) 62 throw new NotEnoughMileageException(name); 63 else 64 totalMileage -= award; 65 } 66 public int getMileage() { 67 return totalMileage; 68 } 69 public String getName() { 70 return name; 71 } 72 } 73 74 class NormalPassenger extends Passenger { 75 NormalPassenger(String name, int totalMileage) { 76 super(name, totalMileage); 77 } 78 public void addMileage(int from, int to) { 79 totalMileage += (int)(MILEAGE[from][to] * NORMAL); 80 } 81 } 82 83 class GoldPassenger extends Passenger { 84 GoldPassenger(String name, int totalMileage) { 85 super(name, totalMileage); 86 } 87 public void addMileage(int from, int to) { 88 totalMileage += (int)(MILEAGE[from][to] * GOLD); 89 } 90 } 91 92 class NotEnoughMileageException extends Exception { 93 String name; 94 public NotEnoughMileageException(String name) { 95 this.name = name; 96 } 97 public String toString() { 98 return "Sorry, your mileage isn't enough for " + 99 "your award trip, " + name + "."; 100 } 101 } プログラムの実行結果を図に示す。
図 実行結果 設問1 プログラム中の に入れる正しい答えを, 解答群の中から選べ。
解答群 ア abstract イ awardTrip ウ GoldPassenger エ NormalPassenger オ Passenger カ private キ public ク totalMileage
設問2 プログラムの行番号 5 を次のとおりに変更した場合, 行番号 11 を実行した後の,利用者 June の積算マイレージの値として正しい答えを, 解答群の中から選べ。 NormalPassenger june = new NormalPassenger("June", 50000); 解答群 ア 3900 イ 10000 ウ 16100 エ 96100 設問3 プログラムの行番号 37 〜 41 を次のとおりに変更したとき, 同じ結果を得るために,行番号 78 の直後及び行番号 87 の直後に 挿入する内容として正しい答えを,解答群の中から選べ。 final static int[][] MILEAGE = {{ 0}, { 300, 0}, {5400, 5700, 0}, {6200, 6100, 4000, 0} }; 解答群
[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ] | |||||||||||||||||||||||