package j1.lesson11;
import java.io.*;
/**
* 課題1103 - 解答例.
* @author s.arakawa
* @version $Id: Receipt_java.rps,v 1.1 2006/03/06 12:56:14 java2005 Exp $
*/
public class Receipt {
/**
* 5個の商品の個数をそれぞれ入力し、それぞれの商品の金額と合計金額を表示するプログラム。
* 商品の単価は、それぞれ以下のようになっているとする。
* <table>
* <tr> <th> 商品番号 </th><th> 単価 </th> </tr>
* <tr> <td> 0 </td> <td> 100 </td> </tr>
* <tr> <td> 1 </td> <td> 150 </td> </tr>
* <tr> <td> 2 </td> <td> 80 </td> </tr>
* <tr> <td> 3 </td> <td> 90 </td> </tr>
* <tr> <td> 4 </td> <td> 250 </td> </tr>
* </table>
*
* 以下の擬似コードで表される。
* <pre>
* プログラム全体
* unit-costs = {100, 150, 80, 90, 250}
* quantities = 長さ unit-costs を持つ新しい配列 (int[])
* item-number = 0
* while item-number が quantities の長さよりも小さい
* print "商品番号" item-number "の個数を入力:"
* quantities[item-number] = コンソール入力 (整数)
* if quantities[item-number] が 0 以上
* item-number の値を 1 増やす
* else
* print "個数は0個以上でなくてはなりません", 改行
* totals = calculate-amounts(unit-costs, quantities)
* for i を 0 から unit-costs の長さ - まで
* print "番号 " i ", "
* print "単価 " unit-costs[i] ", "
* print "個数 " quantities[i] ", "
* print "金額 " totals[i]
* print 改行
* print "合計 " totalsの最後の要素
* print 改行
* </pre>
* @param args 無視される
* @throws IOException 入力時に例外が発生した場合
*/
// プログラム全体
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
// unit-costs = {100, 150, 80, 90, 250}
int[] unitCosts = { 100, 150, 80, 90, 250 };
// quantities = 長さ unit-costs を持つ新しい配列 (int[])
int[] quantities = new int[unitCosts.length];
// item-number = 0
int itemNumber = 0;
// while item-number が quantities の長さよりも小さい
while (itemNumber < quantities.length) {
// print "商品番号" item-number "の個数を入力:"
System.out.print("商品番号" + itemNumber + "の個数を入力:");
// quantities[item-number] = コンソール入力 (整数)
quantities[itemNumber] = Integer.parseInt(reader.readLine());
// if quantities[item-number] が 0 以上
if (quantities[itemNumber] >= 0) {
// item-number の値を 1 増やす
itemNumber++;
}
// else
else {
// print "個数は0個以上でなくてはなりません", 改行
System.out.println("個数は0個以上でなくてはなりません");
}
}
// totals = calculate-amounts(unit-costs, quantities)
int[] totals = calculateAmounts(unitCosts, quantities);
// for i を 0 から unit-costs の長さ - まで
for (int i = 0; i < unitCosts.length; i++) {
// print "番号 " i ", "
System.out.print("番号" + i + ", ");
// print "単価 " unit-costs[i] ", "
System.out.print("単価 " + unitCosts[i] + ", ");
// print "個数 " quantities[i] ", "
System.out.print("個数 " + quantities[i] + ", ");
// print "合計 " totals[i]
// print 改行
System.out.println("金額 " + totals[i]);
}
// print "総計 " totalsの最後の要素
// print 改行
System.out.println("合計 " + totals[totals.length - 1]);
}
/**
* 単価リストと個数リストより、各商品の金額と合計金額を計算する。 返される配列は次のような形式である。
* <ul>
* <li> 配列の長さが 単価リストの配列の長さ + 1 </li>
* <li> 最後の要素以外は 返される配列[i] = 単価リスト[i] * 個数リスト[i] </li>
* <li> 最後の要素は、最後の要素以外の合計 </li>
* </ul>
* 以下の擬似コードで表される。
* <pre>
* calculate-amounts(単価リスト, 個数リスト)
* 金額リスト = 単価リストよりも要素数が1多い新しい配列 (int[])
* 合計金額 = 0
* for i を 0 から 単価リストの長さ - 1
* 金額 = 単価リスト[i] * 個数リスト[i]
* 金額リスト[i] = 金額
* 金額リストの最後の要素 = 合計金額
* 金額リストを返す
* </pre>
* @param unitCosts 単価リスト
* @param quantities 個数リスト
* @return 金額リスト
*/
public static int[] calculateAmounts(int[] unitCosts, int[] quantities) {
// 金額リスト = 単価リストよりも要素数が1多い新しい配列 (int[])
int[] amounts = new int[unitCosts.length + 1];
// 合計金額 = 0
int totalAmount = 0;
// for i を 0 から 単価リストの長さ - 1
for (int i = 0; i < unitCosts.length; i++) {
// 金額 = 単価リスト[i] * 個数リスト[i]
int subAmount = unitCosts[i] * quantities[i];
// 金額リスト[i] = 金額
amounts[i] = subAmount;
totalAmount += subAmount;
}
// 金額リストの最後の要素 = 合計金額
amounts[amounts.length - 1] = totalAmount;
// 金額リストを返す
return amounts;
}
}
|