Mathクラスは、平方根や三角関数、乱数取得といった数値処理を行うことができるクラスです。
Mathクラスはほとんどのメソッドがstaticメソッドとなっており、newをせずに利用することができます。
Mathクラスのメソッド
前述したようにMathクラスの多くのメソッドはstatic宣言がされており、インスタンスを生成せずにメソッドを利用します。
今回はMathクラスで利用できるメソッドの一部を紹介します。また、下記表は簡易的な説明のため、詳細はAPIドキュメント(公式)を参照してください。
メソッド名 | 戻り値の型 | 引数 | 処理内容 |
---|---|---|---|
static abs | int | int a | 引数で指定した値をint型の絶対値で返す。
doubleやfloatなどの引数も利用できる(戻り値は引数と同じ型) |
static min | int | int a, int b |
第一引数と第二引数の数値を比較し、小さい方の数値を返す。
doubleやfloatなどの引数も利用できる(戻り値は引数と同じ型) |
static max | int | int a, int b |
第一引数と第二引数の数値を比較し、大きい方の数値を返す。
doubleやfloatなどの引数も利用できます(戻り値は引数と同じ型) |
static pow | double | double a, double b | 第一引数の数値を第二引数の数値で累乗して返す。 |
static round | long | double a | 引数の数値を四捨五入して返す。 |
static floor | double | double a | 引数の数値を切り捨てして返す。 |
static ceil | double | double a | 引数の数値を切り上げして返す。 |
static random | double | なし | 0から1未満の数値を返す。詳細は後述。 |
Mathのメソッド サンプルプログラム
以下のプログラムを「Number46.java」という名前でWorkフォルダ内に保存します。
保存が完了したら、コマンドプロンプトを起動し、Number46.javaをコンパイルしてみましょう。※プログラムが長いため、必要に応じてコピペで確認してください
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
class Number46{ public static void main(String[] args){ /* Math.abs()メソッド 引数で指定した数値の絶対値を返す 例えば、「+6」や「-6」は「6」という数値として返される */ System.out.println("Math.abs(+6):" + Math.abs(+6)); System.out.println("Math.abs(-6):" + Math.abs(+6)); /* Math.min()メソッド 2つの引数で指定した数値の小さい方を返す Math.min(5,10)では「5」の数値がreturnされる */ System.out.println("Math.min(5,10):" + Math.min(5,10)); /* Math.max()メソッド 2つの引数で指定した数値の大きい方を返す Math.max(5,10)では「10」の数値がreturnされる */ System.out.println("Math.max(5,10):" + Math.max(5,10)); /* Math.pow()メソッド 第一引数の数値を第二引数の数値で累乗して返す Math.pow(2,8)は「256.0」の数値がreturnされる */ System.out.println("Math.pow(2,8):" + Math.pow(2,8)); /* Math.round()メソッド 引数で指定した数値を四捨五入して返す Math.round(10.856)では「11」の数値がreturnされる */ System.out.println("Math.round(10.856):" + Math.round(10.856)); System.out.println("Math.round(10.444):" + Math.round(10.445)); /* Math.floor()メソッド 引数で指定した数値を切り捨てして返す Math.round(10.856)では「10.0」の数値がreturnされる */ System.out.println("Math.floor(10.856):" + Math.floor(10.856)); System.out.println("Math.floor(10.444):" + Math.floor(10.445)); /* Math.ceil()メソッド 引数で指定した数値を切り上げして返す Math.ceil(10.856)では「11.0」の数値がreturnされる */ System.out.println("Math.ceil(10.856):" + Math.ceil(10.856)); System.out.println("Math.ceil(10.444):" + Math.ceil(10.445)); } } |
実行例
C:\work>javac Number46.java
C:\work>java Number46
Math.abs(+6):6
Math.abs(-6):6
Math.min(5,10):5
Math.max(5,10):10
Math.pow(2,8):256.0
Math.round(10.856):11
Math.round(10.444):10
Math.floor(10.856):10.0
Math.floor(10.444):10.0
Math.ceil(10.856):11.0
Math.ceil(10.444):11.0
random()メソッドの利用法
random()メソッドは0~1.0未満の数値をランダム(法則性がない)に取得できます。ランダムな数値を乱数と呼びます。(乱数はjava.util.Randomクラスでも取得可能です)
1 2 3 4 5 6 7 8 |
/* Math.random()メソッド 0から1.0未満の数値をランダムで取得できる バラバラの数値が取得できるかをループ文で確認 */ for(int i = 0; i < 15; i++){ System.out.println("Math.random():" + Math.random()); } |
例えば、上記プログラムをNumber46.javaに追加し、コンパイルおよび実行を行います。すると以下のように表示されます。(ほかのメソッドの結果は省略しています)
Math.random():0.34722456387978073
Math.random():0.7065247377976234
Math.random():0.2913672730696726
Math.random():0.09945869956583042
Math.random():0.517108485331133
Math.random():0.23590420199828477
Math.random():0.6071760177845337
Math.random():0.8570735245568314
Math.random():0.528356953568024
Math.random():0.8219265725561918
Math.random():0.6786729618943722
Math.random():0.9518570245120423
Math.random():0.8957269521188614
Math.random():0.8667130587736274
Math.random():0.5905943198378121
続けて実行すると(再度コンパイルは必要なし)、違った数値が表示されます。
Math.random():0.989900817765463
Math.random():0.2882783361243615
Math.random():0.11017604494494815
Math.random():0.32468418474622707
Math.random():0.1869869566223562
Math.random():0.5220589017694661
Math.random():0.6367455394175209
Math.random():0.44240910477311124
Math.random():0.40446281460758227
Math.random():0.39546473130100823
Math.random():0.07356738399019092
Math.random():0.633941976987737
Math.random():0.8181587918035439
Math.random():0.6073539106239779
Math.random():0.10297111732844033
小数点の桁数もバラバラの為、同一の数値が表示されることはほとんどありません。
しかし、取得できる数値の範囲は0から1.0未満と決まっているため、整数が利用できません。そこで、以下のようにプログラムを変更すると範囲を変更することができます。
1 2 3 4 5 6 7 8 9 10 |
/* 0から10未満の数値をランダムで取得できるように変更 バラバラの数値が取得できるかをループ文で確認 */ for(int i = 0; i < 10; i++){ double r = Math.random(); System.out.println("変更前:" + r); int x = (int)(r * 10); System.out.println("変更後:" + x); } |
例えば、上記プログラムをNumber46.javaに追加し、コンパイルおよび実行を行います。すると以下のように表示されます。(ほかのメソッドの結果は省略しています)
変更前:0.3741510343229292
変更後:3
変更前:0.08375648141966796
変更後:0
変更前:0.637466654004116
変更後:6
変更前:0.5874408534617691
変更後:5
変更前:0.2729577957997017
変更後:2
変更前:0.2979661369882328
変更後:2
変更前:0.07955895027186399
変更後:0
変更前:0.4980407646893229
変更後:4
変更前:0.423065450216789
変更後:4
変更前:0.6133940619132809
変更後:6
上記プログラムでは以下の手順で範囲を変更しています。
- Math.random()で乱数を取得(変数rに格納)
- 1の数値と10をかけると最小値0の場合は0、最大値9.999..の場合は9.99となります
- 2の結果をintでキャストすることで0-9の範囲となります
(つまり最大値はかけた数値からマイナス1まで)
一行にまとめると、以下のようになります。
int x = (int)(Math.random() * 10);
補足 ランダムの最小値を変更する
最小値を変更したい場合は、最小値をキャスト後に最小値分プラスします。但し、最大値も変更される為、プラスした分の最小値を最大値から引く必要があります。
例えば、1-10までとする場合
最小値が0だと掛ける11となるが、最小値が1の為、11-1で、10を掛ける。
int x = (int)(Math.random() * 10) + 1;
例えば、100-200までとする場合
最小値が0だと掛ける201となるが、最小値が100の為、201-100で、101を掛ける。
int x = (int)(Math.random() * 101) + 100;
Math 復習問題
- 以下のプログラムをコンパイルおよび実行するとどのような結果となるか選んでください。
1System.out.println(Math.min(100,50)); - 解答群
- 50
- 100
- true
- false
- Mathクラスにおいて小数点の切り捨てを行う際のメソッド名を選んでください。
- 解答群
- round
- random
- floor
- ceil
- Mathクラスにおいて小数点の切り上げを行う際のメソッド名を選んでください。
- 解答群
- round
- random
- floor
- ceil
- 以下のプログラムをコンパイルおよび実行するとどのような結果となるか選んでください。
1System.out.println((int)(Math.random() * 11)); - 解答群
- 0から11のいずれかの数値が出力
- 1から11のいずれかの数値が出力
- 0から10のいずれかの数値が出力
- 1から10のいずれかの数値が出力
- 1から13のいずれかの数値が出力結果とするためにはどのようなプログラムを記述すればよいか
〇に該当するプログラムを選択してください
1System.out.println(〇); - 解答群
- (int)(Math.random() * 12 + 1)
- (int)(Math.random() * 13 + 1)
- (int)(Math.random() * 12) + 1
- (int)(Math.random() * 13) + 1
- お疲れ様でした。
まとめ
- Mathクラスは平方根や三角関数、乱数取得といった数値処理を行うことができる
- abs()、min()やmax()といった、数値を扱う際に便利なメソッドが用意されている
- raund()、ceil()、floor()といったメソッドで小数点の端数処理を行うことができる
- random()メソッドで乱数を取得できる