// 3つのクラスのメソッドを呼び出し、両替の計算をするクラス import java.io.*; public class ExchangeMoneyCalculate { public static void main(String[] args) { try { // 「MoneyList.csv」というファイルに、金額のリストを保存してある // ファイルは、「通貨の種類,為替レート,日本円」という形式 FileReader fr = new FileReader("MoneyList.csv"); BufferedReader br = new BufferedReader(fr); // 両替金額の計算をするクラス (ExchangeMoney) を配列として宣言 ExchangeMoney[] ex = new ExchangeMoney[100]; String line, type, rateString, yenString, message; int rate, yen, index1, index2, num = 0, i; // 「MoneyList.csv」ファイルのすべての行を読み込み while (br.ready()) { // ファイルから 1 行読み込み、1 つ目と 2 つ目の「,」の位置を調べる line = br.readLine(); index1 = line.indexOf(","); index2 = line.lastIndexOf(","); // type: ドル・ユーロ・その他の通貨の種類を、読み込んだ行から取り出し type = line.substring(0, index1); // rateString: 読み込んだ行から為替レートを取り出し rateString = line.substring(index1 + 1, index2); // rate: 取り出した為替レートを int 型に変換 rate = Integer.parseInt(rateString); // yenString: 読み込んだ行から日本円の金額を取り出し yenString = line.substring(index2 + 1); // yen: 取り出した日本円の金額を int 型に変換 yen = Integer.parseInt(yenString); if (type.equals("ドル")) { // 読み込んだ行が、ドルについての為替レートと日本円であれば、DollerExchange クラスのオブジェクトを作成 DollerExchange doller = new DollerExchange(); // 作成したオブジェクトに、為替レートと日本円の金額を設定 doller.rate = rate; doller.yen = yen; // 作成したオブジェクトを ExchangeMoney クラス (DollerExchange の親クラス) のオブジェクトとして配列に設定 ex[num] = doller; } else if(type.equals("ユーロ")) { // 読み込んだ行が、ユーロについての為替レートと日本円であれば、EuroExchange クラスのオブジェクトを作成 EuroExchange euro = new EuroExchange(); // 作成したオブジェクトに、為替レートと日本円の金額を設定 euro.rate = rate; euro.yen = yen; // 作成したオブジェクトを ExchangeMoney クラス (EuroExchange の親クラス) のオブジェクトとして配列に設定 ex[num] = euro; } else { // 読み込んだ行が、ドルでもユーロでもないその他の為替レートと日本円であれば、ExchangeMoney クラスのオブジェクトを作成 ex[num] = new ExchangeMoney(); // 作成したオブジェクトに、為替レートと日本円の金額を設定 ex[num].rate = rate; ex[num].yen = yen; } // num: ExchangeMoney クラスの配列の添え字 (ここまでで 1 つのオブジェクトについて設定が終わったので、添え字の値を 1 増やす) num = num + 1; } // 「MoneyList.csv」ファイルに書かれている金額のリストの個数は、この時点で変数 num の値になっているので、num 個分のオブジェクトが ExchangeMoney クラスの配列として設定されているはず // 従って、for 文を num 回繰り返すと、設定されたオブジェクトをすべて見ていくことができる for (i = 0; i < num; i = i + 1) { // ExchangeMoney クラスで定義されている calculateYen メソッドを呼び出し /* calculateYen メソッドは、DollerExchange クラスと EuroExchange クラスでオーバーライドされているので、配列 ex に設定されているオブジェクトが DollerExchange または EuroExchange のオブジェクトであれば、それぞれオーバーライドされたメソッドを呼び出し (ポリモーフィズム) */ message = ex[i].calculateYen(); System.out.println(message); } } catch(IOException e) { } } }