解答例 - j1.lesson04.ToZero

package j1.lesson04;

import java.io.*;

/**
 * 課題0401 - 解答例.
 @author s.arakawa
 @version $Id: ToZero_java.rps,v 1.1 2006/03/06 12:56:15 java2005 Exp $
 */
public class ToZero {
    /**
     * コンソールに整数を一つ入力させ、入力された値を1づつ0に近づかせながら表示するプログラム。
     @param args 無視される
     @throws IOException 入力中に例外が発生した場合
     */
    public static void main(String[] argsthrows IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        System.out.print("整数を入力:");
        int n = Integer.parseInt(reader.readLine());
        
        // 方針
        // 
        // まず、出力のパターンを理解する
        // a. どんな値が指定されても、最初に表示されるのは指定された値
        // b. どんな値が指定されても、最後に表示されるのは 0
        // c. 正の値が指定された場合は、その値から 0 までを 1 づつ減らしながら表示する
        // d. 負の値が指定された場合は、その値から 0 までを 1 づつ増やしながら表示する
        // e. 0 が指定された場合は、0 とだけ表示する
        //
        // 次に、プログラムに書き直しやすいようにルールを見つける
        // f. 0 は正として扱っても負として扱ってもかまわない (c,d,e)
        // g. 正の値で、その値から 0 までを 1 づつ減らしながら… は、値が 0 以上の間…となる
        // h. 負の値で、その値から 0 までを 1 づつ減らしながら… は、値が 0 以下の間…となる
        //
        // 流れを考える
        // 1. 指定された値が正か負かで場合分け
        // 2p. (正の値が指定された場合) n から 0 まで、1 づつ減らしながら表示する
        // 2m. (それ以外 = 負の値または0) n から 0 まで、1 づつ増やしながら表示する (f)
        
        // 指定された値が正か負かで場合分け
        if (n > 0) {
            // (正の値が指定された場合)
            // n から 0 まで、1 づつ減らしながら表示する
            // -> n から 0 ということは、 n が 0 以上の間 (g)
            for (int i = n; i >= 0; i--) {
                System.out.println(i);
            }
        }
        else {
            // (それ以外 = 負の値または0)
            // n から 0 まで、1 づつ増やしながら表示する
            // -> n から 0 ということは、n が 0 以下の間 (h)
            for (int i = n; i <= 0; i++) {
                System.out.println(i);
            }
        }
    }
}