すべてを記述するプログラムから,for文を使ったプログラムへの進化

1.目的

以下のような表示をさせたい。

(0) A child says, "The king is naked."
(1) A child says, "The king is naked."
(2) A child says, "The king is naked."
(3) A child says, "The king is naked."
(4) A child says, "The king is naked."

2.すべてを記述するプログラム
最初は,すべてを記述するプログラムを作成してみる。

/*For1a1.java by Kosaka*/

public class For1a1 {
    public static void main(String[] args) {
        For1a1 mainprg = new For1a1();
    }
   
    For1a1() {
        System.out.printf("(0) ");
        System.out.printf("A child says, ");
        System.out.printf("\"The king is naked.\"\n");
        System.out.printf("(1) ");
        System.out.printf("A child says, ");
        System.out.printf("\"The king is naked.\"\n");
        System.out.printf("(2) ");
        System.out.printf("A child says, ");
        System.out.printf("\"The king is naked.\"\n");
        System.out.printf("(3) ");
        System.out.printf("A child says, ");
        System.out.printf("\"The king is naked.\"\n");
        System.out.printf("(4) ");
        System.out.printf("A child says, ");
        System.out.printf("\"The king is naked.\"\n");
    }
}

3.値が変わるところを,数値表示のプログラムにする

/*For1a2.java by Kosaka*/

public class For1a2 {
    public static void main(String[] args) {
        For1a2 mainprg = new For1a2();
    }
   
    For1a2() {
        System.out.printf("(%d) ",0);
        System.out.printf("A child says, ");
        System.out.printf("\"The king is naked.\"\n");
        System.out.printf("(%d) ",1);
        System.out.printf("A child says, ");
        System.out.printf("\"The king is naked.\"\n");
        System.out.printf("(%d) ",2);
        System.out.printf("A child says, ");
        System.out.printf("\"The king is naked.\"\n");
        System.out.printf("(%d) ",3);
        System.out.printf("A child says, ");
        System.out.printf("\"The king is naked.\"\n");
        System.out.printf("(%d) ",4);
        System.out.printf("A child says, ");
        System.out.printf("\"The king is naked.\"\n");
    }
}

4.できるだけ,同じことを何回も書く形式に変更する
同じことを何回も書く形式のプログラムにすると,for文を使う道筋が見える。
値を直接表示するのではなく,変数iを用いると,同じ形が見えてくる。
プログラム中 i++; というのは i=i+1; と同じ意味で,iの値を1増やせの意味となる。

/*For1a3.java by Kosaka*/

public class For1a3 {
    public static void main(String[] args) {
        For1a3 mainprg = new For1a3();
    }
   
    For1a3() {
        int i;
        i=0;
        System.out.printf("(%d) ",i);
        System.out.printf("A child says, ");
        System.out.printf("\"The king is naked.\"\n");
        i++;
       
        System.out.printf("(%d) ",i);
        System.out.printf("A child says, ");
        System.out.printf("\"The king is naked.\"\n");
        i++;
       
        System.out.printf("(%d) ",i);
        System.out.printf("A child says, ");
        System.out.printf("\"The king is naked.\"\n");
        i++;
       
        System.out.printf("(%d) ",i);
        System.out.printf("A child says, ");
        System.out.printf("\"The king is naked.\"\n");
        i++;
       
        System.out.printf("(%d) ",i);
        System.out.printf("A child says, ");
        System.out.printf("\"The king is naked.\"\n");
    }
}

このプログラムでは,つぎの形が何回も使われている

        System.out.printf("(%d) ",i);
        System.out.printf("A child says, ");
        System.out.printf("\"The king is naked.\"\n");
        i++;

5.ここでfor文を導入する

/*For1.java by Kosaka*/

public class For1 {
    public static void main(String[] args) {
        For1 mainprg = new For1();
    }
   
    For1() {
        int i;
        for (i=0; i<5; i++) {
            System.out.printf("(%d) ",i);
            System.out.printf("A child says, ");
            System.out.printf("\"The king is naked.\"\n");
        }
    }
}