解答例 - j1.lesson12.LeagueStanding

package j1.lesson12;

import java.io.*;

/**
 * 課題1203 - 解答例.
 @author arakawa
 @version $Id: LeagueStanding_java.rps,v 1.1 2006/03/06 12:56:15 java2005 Exp $
 */
public class LeagueStanding {

    /**
     * 3チームから成るリーグ戦の成績から、勝ち点を計算するプログラム。
     * 以下の擬似コードで表される。
     <pre>
     * プログラム全体
     *     得失点のテーブル = 3x3 の新しい配列(int[])
     *     for i = 0 to 1
     *         print &quot;チーム&quot; i &quot;の成績&quot;, 改行
     *         for j = i + 1 to 2
     *             print &quot;  チーム&quot; j &quot;との得失点差:&quot;
     *             score = コンソール入力 (int)
     *             該当する得失点のテーブルを埋める
     *     victories = count-victories(得失点のテーブル)
     *     for i = 0 to 2
     *         print &quot;チーム&quot; i &quot;: &quot;
     *         print &quot;勝ち点&quot; victories[i] &quot;, &quot;
     *         print 改行
     </pre>
     @param args 無視される
     @throws IOException 入力中に例外が発生した場合
     */
    // プログラム全体
    public static void main(String[] argsthrows IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        // 得失点のテーブル = 3x3 の新しい配列(int[])
        int[][] standing = new int[3][3];

        // for i = 0 to 1
        for (int i = 0; i <= 1; i++) {
            // print "チーム" i "の成績", 改行
            System.out.println("チーム" + i + "の成績");

            // for j = i + 1 to 2
            for (int j = i + 1; j <= 2; j++) {
                // print " チーム" j "との得失点差:"
                System.out.print("  チーム" + j + "との得失点差:");

                // score = コンソール入力 (int)
                int score = Integer.parseInt(reader.readLine());

                // 該当する得失点のテーブルを埋める
                standing[i][j= score;
                standing[j][i= -score;
            }
        }

        // victories = count-victories(得失点のテーブル)
        double[] victories = countVictories(standing);

        // for i = 0 to 2
        for (int i = 0; i <= 2; i++) {
            // print "チーム" i ": "
            System.out.print("チーム" + i + ": ");
            // print "勝ち点" victories[i] ", "
            // print 改行
            System.out.println("勝ち点" + victories[i]);
        }
    }

    /**
     * 得失点のテーブルより、各チームごとの勝ち点を計算する。
     * 以下の擬似コードで表される。
     <pre>
     * count-victories(standing)
     *     victories = standing の長さ(1次元分)を持つ新しい配列 (double[])
     *     for i = 0 to victories の長さ - 1
     *         for j = 0 to victories の長さ - 1
     *             if i と j が同じ
     *                 何もしない
     *             else if standing[i][j] が0
     *                 victories[i] を 0.5 増やす
     *             else if standing[i][j] が0より大きい
     *                 victories[i] を 1.0 増やす
     *     victories を返す
     </pre>
     @param standing 得失点のテーブル
     @return 各チームごとの勝ち点
     */
    // count-victories(standing)
    public static double[] countVictories(int[][] standing) {
        // victories = standing の長さ(1次元分)を持つ新しい配列 (double[])
        double[] victories = new double[standing.length];

        // for i = 0 to victories の長さ - 1
        for (int i = 0; i < victories.length; i++) {
            // for j = 0 to victories の長さ - 1
            for (int j = 0; j < victories.length; j++) {
                // if i と j が同じ
                if (i == j) {
                    // 何もしない
                }
                // else if standing[i][j] が0
                else if (standing[i][j== 0) {
                    // victories[i] を 0.5 増やす
                    victories[i+= 0.5;
                }
                // else if standing[i][j] が0より大きい
                else if (standing[i][j0) {
                    // victories[i] を 1.0 増やす
                    victories[i+= 1.0;
                }
            }
        }
        // victories を返す
        return victories;
    }
}