実践Java入門8. 繰り返し(for)

投稿日:

更新日:

カテゴリ:

ここでは、Javaの「for」を使った繰り返し処理について紹介します。

繰り返し

繰り返しはプログラムの一番の強みと言っても過言ではないと思います。たくさんあるデータの中身を一つずつ処理していく小さい範囲の繰り返しだったり、組んだプログラムは同じ要求に対して繰り返し実行したりします。

ここでは、繰り返し処理で一番使われる「for」分を使って説明します。

スクラッチなど、宝くじを買う場面を想像してみてください。仮に1枚200円、50%の割合で当選し、当選金額は買った金額の倍である400円という宝くじがあるとすれば、手持ち1000円で10回買ったら、いくら残るでしょうか。

結果はもちろん運によりますよね。一番良いパターンとしては、すべて当たりで1000円が3000円になります。一番悪いパターンとしては、毎回はずれで、10回のところか、5回でお金がなくなりますよね。

早速そのようなプログラムを書いて自分の運を試してみましょう。

import java.util.Random;

public class HelloWorld {

    public static void main(String[] args) {
        // 残高
        int amount;
        amount = 1000;
        // 宝くじの値段
        int cost = 200;
        // 当選金
        int win = 400;
        Random rand = new Random();
        // 10回繰り返し
        for (int i = 0; i < 10; i++) { if (amount >= cost) {
                amount = amount - cost;
                if (rand.nextInt(2) == 1) {
                    // あたり
                    System.out.println(i + ": Hit");
                    amount = amount + win;
                } else {
                    // はずれ
                    System.out.println(i + ": Miss");
                }
            } else {
                // 繰り返し中断
                break;
            }
        }
        // 残り金額
        System.out.println("amount: " + amount);
    }

}

今回のソースは少し長くなりますので、要点のところはコメントを付けております。全体は次のようになります。

今回当選かどうかランダムで決めるために、「Random」クラスを利用してますが、今回は一旦繰り返し処理のところを注目します。

15行と30行にある以下の形が繰り返し処理の「for」文になります。

for (int i = 0; i < 10; i++) {
    // 繰り返し処理
}

カッコ内にある「i」はint型の変数であり、繰り返しの回数を表しています。変数ですので、名前は変数の命名ルールに従えば何でも大丈夫ですが、繰り返し処理の場合よく「i」が使われます。

for」を使った繰り返し処理は以下の⓪は最初の一回のみ、そして①~③順で繰り返し実行されます。

for (⓪; ①; ③) {
    ②
}

そのため、まず一番最初にiが0と設定されて繰り返しが始まります。
1回目の処理で、

  • ①にある処理はiと10の大きさ比べを行い、この時点iは「0」ですので、0は小なり10で判定が成立して②の処理に移ります。
  • ②の処理終わったら、③の処理に移り、「i++」は「i = i + 1」と同義で、iに自分自身を+1した値で代入するという意味になります。i = 0 + 1となりますので、結果iが「1」になります。このようにiの繰り上げを「インクリメント」とも言います。そして処理は①に戻ります。

2回目の処理で、

  • ①にある処理はiと10の大きさ比べを行い、この時点iは「1」ですので、1は小なり10で判定が成立して②の処理に移ります。
  • ②の処理終わったら、③の処理に移り、iをインクリメントして「2」になります。そして①に戻ります。
    このように処理を繰り返し、10日目の処理で、
  • ①にある処理はiと10の大きさ比べを行い、この時点iは「10」ですので、10は10と同じになり、小なりでありませんので、判定が成立しなくなり、処理が終わります。

繰り返しの中断

宝くじの例では、お金がなくなると、当然買えなくなりますので、それ以降繰り返し処理しても意味のないことになりますので、残高が0になったら、繰り返し処理を中断したいと思います。

上記サンプルコードの16行目、26~28行目に注目してみてください。以下のようになります。

if (amount >= cost) {
    // 宝くじ買う処理
} else {

    // 繰り返し中断
    break;
}

実践Java入門7. 条件分岐(if-else)で紹介した「if」条件分岐を利用して宝くじ1枚分のお金が残ってるかどうかを判定しています。
宝くじ1枚分のお金が残ってない場合、「else」処理に入り、「break」が実行されます。「break」実行すると、「for」カッコ中にある②の判定結果と関係なく、すぐ繰り返し処理を中断して31行目の処理に移ります。

このように繰り返し処理を中断したい時は「break」を使います。

サンプルコードを何回も実行すると、下記のように10回繰り返していませんが、お金がなくなり、処理が中断されることも確認できると思います。

まとめ

for」を使った繰り返し処理の紹介はここまでですが、皆さんの運勢はいかがでしたでしょうか。
私この記事作成するにあたって50回以上は実行していると思いますが、結果は「繰り返しの中断」のところでお見せしたように0になった時はありますが、3000になることは一度もありませんでした。。本当に3000になるの?!と自分が書いたプログラムを疑って、必ず当たりになるようにプログラムを書き変えてみた結果、やはり3000になりました。ただ私の運勢が弱いだけだったようです。。。ちなみに、一番多く残って次のように2200でした。

繰り返しの中断はまだイレギュラーのほうだと思いますので、ここでは繰り返し処理したいなら、「for」文使えば良いと覚えていただければ大丈夫です!

入門編のまとめ

入門編はここまでです。これまでには、Java開発環境の構築から、IDEであるEclipseの設定行いました。そしてHelloWorldアプリケーションのベースにJavaの基本的な概念について勉強し、ちょっとしたバリエーションとして条件分岐と繰り返しを入れた実装も見てきました。

ここまでで一緒にやって来られた方、胸を張って自分はJavaというプログラミングの言語を触ってことがあると言っていいと思います!
しっかり自分を褒めていいです!

続きまして、初級編では、入門編の増強版として、クラス、フィールド、メソッドについて実践的な場面を想定して作成し、データ型のバリエーションを増やしてJavaの基礎となる部分をしっかり築いていきたいと思います。


投稿日

カテゴリー:

投稿者:

タグ:

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です