解答例 - j1.lesson11basic.ArrayCircumferenceOfPolygon

package j1.lesson11basic;

import java.io.*;

/**
 * 課題1113 - 解答例.
 @author java2005
 @version $Id: ArrayCircumferenceOfPolygon_java.rps,v 1.1 2006/07/14 05:33:59 java2005 Exp $
 */
public class ArrayCircumferenceOfPolygon {

    /**
     * コンソールから多角形の頂点データを次々と入力し、多角形の周の長さを表示するプログラム。
     * mainメソッドの動作を表す擬似コードは以下の通りである。
     <pre><code>
     * プログラム全体
     *     print &quot;頂点数を入力:&quot;
     *     numberOfVertices = コンソール入力 (整数)
     *     if numberOfVertices が2以下
     *         print &quot;頂点数は、3以上にして下さい。&quot;
     *         プログラムの終了
     *     x = 長さ numberOfVertices の新しい配列 (double[])
     *     y = 長さ numberOfVertices の新しい配列 (double[])
     *     // データの入力  
     *     for i を  0 から x.length - 1 まで
     *         print &quot;x[&quot; + i + &quot;]を入力: &quot;
     *         x[i] = コンソール入力(実数)
     *         print &quot;y[&quot; + i + &quot;]を入力: &quot;
     *         y[i] = コンソール入力(実数)
     *     // 各辺の長さの合計を求める(外周の長さを求める)
     *     totalLength = 0
     *     for i を  0 から x.length - 2 まで
     *         totalLength にi番目の頂点とi+1番目の頂点の間の距離を加える
     *     totalLength に0番目の頂点と最後の頂点の間の距離を加える
     *     print &quot;外周の長さ:&quot; + totalLength
     </code></pre>
     @param args 無視される
     @throws IOException 入力時に例外が発生した場合
     */
    public static void main(String[] argsthrows IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        // データの個数を入力する
        System.out.print("頂点数を入力: ");
        int numberOfVertices = Integer.parseInt(reader.readLine());
        if (numberOfVertices <= 2) {
            System.out.print("頂点数は、3以上にして下さい。");
            return;
        }
        // データを入力する
        double[] x = new double[numberOfVertices];
        double[] y = new double[numberOfVertices];

        for (int i = 0; i < x.length; i++) {
            System.out.print("x[" + i + "]を入力: ");
            x[i= Double.parseDouble(reader.readLine());
            System.out.print("y[" + i + "]を入力: ");
            y[i= Double.parseDouble(reader.readLine());
        }
        // 各辺の長さの合計を求める(外周の長さを求める)
        double totalLength = 0;
        for (int i = 0; i <= x.length - 2; i++) {
            double tmpX = x[i- x[i + 1];
            double tmpY = y[i- y[i + 1];
            totalLength += Math.sqrt(tmpX * tmpX + tmpY * tmpY);
        }

        double tmpX = x[x.length - 1- x[0];
        double tmpY = y[x.length - 1- y[0];
        totalLength += Math.sqrt(tmpX * tmpX + tmpY * tmpY);

        System.out.println("外周の長さ:" + totalLength);
    }
}