平成14年 春期 基本情報技術者 午後 問12
問12 Java
〔プログラムの説明〕
飛行機の利用者の種別(一般利用者,ゴールド利用者)と
利用区間からマイレージを求めて積算マイレージを計算するプログラムである。
利用者の各種別のマイレージの計算方法は,次のとおりである。
・一般利用者: マイレージ=基準距離
・ゴールド利用者:マイレージ=基準距離× 1.25
利用区間とその基準距離を,次表に示す。
表 利用区間と基準距離
利用区間 |
基準距離 |
成田 − 関西 | 300 |
成田 − ロサンゼルス | 5,400 |
成田 − パリ | 6,200 |
関西 − ロサンゼルス | 5,700 |
関西 − パリ | 6,100 |
ロサンゼルス − パリ | 4,000 |
計算したマイレージを,それまでの積算マイレージに加える。
利用者は積算マイレージを無料往復チケットに交換することができる。
プログラムは,次の五つのクラスと一つのインタフェースで構成されている。
MileageTest
メソッド main をもつテスト用のクラスであり,次の処理を行う。
(1) 一般利用者とゴールド利用者のインスタンスを生成し,利用者名,
積算マイレージの情報を初期化する。
(2) 新しい積算マイレージを計算し,実行結果を出力する。
コンストラクタ MileageTest の引数は,利用者名,出発地,到着地,
無料往復チケット指定である。
無料往復チケット指定には,無料往復チケットに交換する場合は交換に必要なマイレージを
指定し,無料往復チケットに交換しない場合は 0 を指定する。
Passenger
利用者を表す抽象クラスである。
抽象メソッド addMileage は,積算マイレージを計算する。
メソッド awardTravel は,無料往復チケットの交換が可能か否かの判定を行い,
可能であれば積算マイレージから無料往復チケット交換に必要なマイレージを減算し,
不可能であれば例外処理によってメッセージを出力する。
メソッド
getMileage は,積算マイレージを返す。メソッド getName は,利用者名を返す。
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 }
プログラムの実行結果を図に示す。
Taro's mileage: 6200
Sorry, your mileage isn't enough for your award trip, Taro.
Mark's mileage: 105000
You get an award trip.
Your mileage is now 85000.
June's mileage: 6100
Sorry, your mileage isn't enough for your award trip, June.
Jiro's mileage: 50375
Taro's mileage: 12400
Sorry, your mileage isn't enough for your award trip, Taro.
|
図 実行結果
基本情報技術者試験
設問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}
};
解答群
ア |
if (from == 0) {
int tmp = from;
from = to;
to = tmp;
}
イ |
if (from != to) {
int tmp = from;
from = to;
to = tmp;
}
| |
ウ |
if (from > to) {
int tmp = from;
from = to;
to = tmp;
}
エ |
if (from < to) {
int tmp = from;
from = to;
to = tmp;
}
|
|
エ
[←前の問題]
[次の問題→]
[問題一覧表]
[分野別]
[基本情報技術者試験TOP
]
©2004-2024 情報処理試験.jp
|
|
|