ランダムな整数 Math random - 萌えJava超入門
第八章 Mathクラスの利用

ランダムな整数の取得

Math.randomメソッドを利用して
ランダムな整数値を取得する方法を紹介します。


 int dice =
   (int)(Math.random()*6);
0~5 のランダムな整数を取得する式

目次


ゲームとか
超作ってみたい!!
私もやって
みたいっス!!
ハハハ。
みんなオタクだなぁ。



あなたに言われたくないわよ。


1.Mathクラスの randomメソッド

Mathクラスを使用します。
Mathクラスは、数学的な値やメソッドをstaticで提供してくれる便利なクラスです。

Mathクラスの randomメソッドは、「0.0 ~ 1未満」の値を doubleでランダムに生成します。
書式は以下の通りです。

書式
double rand = Math.random();

doubleの変数「rand」に
ランダムな値を代入するってことっスね。


2.サイコロにする


Math.random()の値を 6倍して、intにキャストすると、0~5 6つの目を持つサイコロになります。
意図的に切り捨てさせるテクニックですね。
もちろん 6倍でなくても、構いません。
1~6 の目にしたい場合は、結果に+1すればOKです。

6目のサイコロ
 1. Math.random()の値を 6倍する。
 2. intにキャストする。

ここで100倍すれば、
100目のサイコロになるのね。
//Sample18_01.java
class Sample18_01 {
    public static void main(String[] args){
        double rand = Math.random();//0~1未満
        System.out.println(rand);
        rand = rand*6;//0~6未満
        System.out.println(rand);
        int dice = (int)rand + 1;//1~6の整数
        System.out.println(dice);
    }
}

コマンドライン
>javac Sample18_01.java
>java Sample18_01
0.5293489904057942
3.176093942434765
4

>java Sample18_01
0.10795502200059792
0.6477301320035875
1

>java Sample18_01
0.8232900533313441
4.939740319988065
5

毎回値が違いますね。



3.短い書き方


下記のように1行で書くこともできます。
一行で書いた例
int dice = (int)(Math.random()*6);

//Sample18_02.java
class Sample18_02 {
    public static void main(String[] args){
        /*1~6 の整数*/
        int dice = (int)( Math.random()*6 + 1 );
        System.out.println(dice);
    }
}

変数「rand」を使わずに記述

こうした書き方は、一般的に可読性が落ちるので推奨されません。
ただ、今回のように多くのプログラマが知っている「慣用句的なコード」は、こうした書き方を許容する場合もあります。
まあ、どっちでも動くんだが。

ちなみにうっかり
   (int)Math.random()*6 + 1 ;
とすると、答えが全部 1になるという地雷があります。\(^o^)/
(キャストが先になるので 「0 * 6 + 1」 になっちゃう。)


このような書き方は、優しさが足りない感じでしょうか。
このチュートリアルでは、一度紹介したコードを、それ以降短く記述する場合があります。
なるべくわかりやすく紹介しますのでよろしくお願いいたします。
この場合なら
私は短く書くな。
やさしくない!

お疲れ様でした。




© 2019 awasekagami