こんにちは。ハンドルネーム「Javaを復習する初心者」です。このサイトはプログラミング言語Javaの復習・学習をするブログです。プログラムの開発・実行はEclipseで行ってます。
スポンサーリンク
お知らせ
  • 参考文献のページ作りました。
  • Amazon.co.jpアソシエイトに参加していますが、参考文献の紹介はもしもアフィリエイトに統一しました。
  • 2016年10月9日からは投稿ペースを落とします。週1回くらいにする予定です。
スポンサーリンク

while文とRandomクラス

こんにちは。「Javaを復習する初心者」です。今回はwhile文で使ってみました。

繰り返し処理をする構文にwhile文というのがあります。擬似乱数値を関数するメソッドjava.util.Random#nextIntを組み合わせてサンプルを作成しました。

プログラム

以下にフローを書きます。

  1. 変数numを初期値0で宣言する。
  2. 変数numが5でない場合、以下の処理を繰り返す。
    1. numに0から9までのランダムな値を格納する。
    2. 以下の形式でコンソールに文字列を出力する。
      “回数: ” + [繰り返し回数] + “, 値: ” + num
package test;

import java.util.Random;

public class HelloWhile {

    public static void main(String[] args) {

        Random random = new Random();
        int num = 0;
        int cnt = 0;
        while (num != 5) {
            num = random.nextInt(10); // 10未満の乱数
            System.out.println("回数: " + ++cnt + ", 値: " + num);
        }

    }

}
回数: 1, 値: 3
回数: 2, 値: 3
回数: 3, 値: 2
回数: 4, 値: 0
回数: 5, 値: 8
回数: 6, 値: 7
回数: 7, 値: 8
回数: 8, 値: 5
回数: 1, 値: 1
回数: 2, 値: 7
回数: 3, 値: 9
回数: 4, 値: 3
回数: 5, 値: 3
回数: 6, 値: 2
回数: 7, 値: 7
回数: 8, 値: 7
回数: 9, 値: 2
回数: 10, 値: 7
回数: 11, 値: 6
回数: 12, 値: 4
回数: 13, 値: 3
回数: 14, 値: 6
回数: 15, 値: 8
回数: 16, 値: 7
回数: 17, 値: 7
回数: 18, 値: 3
回数: 19, 値: 8
回数: 20, 値: 0
回数: 21, 値: 8
回数: 22, 値: 5

解説

while文の構文はwhile (条件) {処理内容;…}です。while文は条件がtrueの場合、中括弧の中の処理を実行します。for文のようにカウンタ変数を使う方法もありますが、今回は乱数の値でループを抜けるかどうか決まるようにしました。条件の「num != 5」で比較演算子を使っているのはプリミティブ型の比較をするからです。「==」は等しい、「!=」は等しくないを表します。while文は条件次第では処理内容が1度も実行されませんが、必ず1度は実行されるdo-while文というのがあります。

printlnで回数の表示をしている個所「++cnt」はインクリメントの前置です。式全体の実行前に1加算されます。初期値が0のなので最初の出力では1になります。後置「cnt++」の場合、式全体の実行後に1加算されるため、最初の出力が0になってしまいます。

java.util.Randomクラスには乱数を取得するメソッド「int nextInt(int bound)」があります。以下は、java 8 API仕様からの引用です。

修飾子と型
int
メソッドと説明
nextInt(int bound)
この乱数ジェネレータのシーケンスを使って、0から指定された値の範囲(0は含むが、その指定された値は含まない)で一様分布のint型の擬似乱数値を返します。

修飾子にstaticがないので、クラスのインスタンスを生成する必要があります。「new」キーワードを使い変数randomに格納し、random.メソッド名の形式でメソッドを使います。staticメソッドを使う場合はインスタンスは必要なく、クラス名.メソッド名の形式で使うことができます。例えばMathクラスのメソッドabsはstaticなので、Math.abs(-1);という書き方で使います。(引数の絶対値を返却するメソッドです。)