解答例 - j1.lesson07.PlotDiamond

package j1.lesson07;

import java.io.*;

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

    /**
     * コンソールから1以上の整数を入力させ、入力された値をサイズとした図形をコンソール上に表示するプログラム。
     * 表示する図形は以下の通りである。
     <pre>
     * (入力された値が 1)
     * *
     
     * (入力された値が 2)
     *  *
     * ***
     *  *
     
     * (入力された値が 3)
     *   *
     *  ***
     * *****
     *  ***
     *   *
     
     * (入力された値が 4)
     *    *
     *   ***
     *  *****
     * *******
     *  *****
     *   ***
     *    *
     
     * ...
     </pre>
     @param args 無視される
     @throws IOException 入力時に例外が発生した場合
     */
    public static void main(String[] argsthrows IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        System.out.print("図形の大きさを入力:");
        int size = Integer.parseInt(reader.readLine());
        
        if (size < 1) {
            System.out.println("1以上の整数を入力してください");
        }
        else {
            plot(size);
        }
    }
    
    /**
     * 与えられた引数を図形のサイズとして、課題で指定された図形を表示する。
     <code>size</code> が <code>0</code> 以下の場合は考慮しない。
     @param size 図形のサイズ
     */
    public static void plot(int size) {

        // 1 行目から size 行目までを表示
        for (int i = 1; i <= size; i++) {
            plotLine(size - i, * i - 1);
        }

        // size + 1 行目から最後まで表示
        for (int i = size - 1; i >= 1; i--) {
            plotLine(size - i, * i - 1);
        }
    }
    
    /**
     <b>このメソッドは課題の仕様に含まれていない</b>
     * 与えられた引数に対して、課題で指定された図形の1行分を表示する。
     * 引数は <code>space</code><code>aster</code> の順に指定され、
     <code>space</code> は先頭のスペースの個数、
     <code>aster</code> は表示するアスタリスクの個数を表す。
     @param space 先頭のスペースの個数
     @param aster 表示するアスタリスクの個数
     */
    public static void plotLine(int space, int aster) {
        
        // 先頭のスペースを回数分表示
        for (int i = 1; i <= space; i++) {
            System.out.print(" ");
        }
        
        // * を回数分表示
        for (int i = 1; i <= aster; i++) {
            System.out.print("*");
        }

        // 改行を行う。単純に
        // System.out.println();
        // でも同じ意味になる
        System.out.println("");
    }
}