
Java入門|Mathクラスで数値計算を行う方法
計算のための便利な部品を使えるようになると、Javaの数値処理はもっとスマートになる
Javaでプログラムを書いていると、ただ四則演算をするだけでは足りない場面が少しずつ増えてきます。たとえば、2つの数のうち大きいほうを調べたいとき、絶対値を求めたいとき、乱数を使ってランダムな結果を作りたいときなどです。こうした処理を自分ですべて一から書くのは大変ですが、Javaにはあらかじめ便利な機能が用意されています。その代表が Mathクラス です。
Mathクラスには、数学的な計算を助けてくれるメソッドがたくさん入っています。最大値や最小値を調べる、累乗を求める、平方根を計算する、乱数を作るなど、実用的な処理をすぐに呼び出せます。しかも、これらの多くはクラスメソッドとして用意されているので、オブジェクトを作らなくても使えます。
ここでは、Mathクラスの基本的な考え方から、よく使うメソッドの意味、実際のプログラムでの使い方まで、やさしく整理しながら見ていきます。Mathクラスを使えるようになると、数値を扱うプログラムがぐっと書きやすくなります。
Mathクラスとは何か
Mathクラスは、数値計算に役立つ機能をまとめたクラスです。Javaでは、普通の足し算や引き算は演算子で書けますが、それだけでは対応しにくい計算もあります。
たとえば、次のような処理です。
| やりたいこと | 例 |
|---|---|
| 大きいほうを調べる | 8 と 15 のうち大きい値を知りたい |
| 小さいほうを調べる | 3 と 9 のうち小さい値を知りたい |
| 絶対値を求める | -7 を 7 として扱いたい |
| 平方根を求める | 25 の平方根を知りたい |
| 累乗を求める | 2 の 3乗を求めたい |
| 乱数を作る | サイコロの目をランダムに出したい |
こうした処理を簡単に行えるようにしたのが Mathクラス です。
Mathクラスはクラスメソッドで使う
Mathクラスの大きな特徴は、便利なメソッドの多くが クラスメソッド であることです。つまり、new を使って Mathクラスのオブジェクトを作らなくても使えます。
呼び出し方は次のようになります。
Math.メソッド名(引数)たとえば、最大値を調べるならこうです。
Math.max(8, 15)この書き方は、以前学んだ Integer.parseInt() と似ています。どちらもクラス名をつけて直接呼び出しています。
Mathクラスの主なメソッド
Mathクラスにはいろいろなメソッドがあります。主なものを整理すると、次のようになります。
| メソッド名 | 機能 |
|---|---|
| abs | 絶対値を返す |
| ceil | 指定した値以上の最も小さい整数値を返す |
| cos | コサイン値を返す |
| floor | 指定した値以下の最も大きい整数値を返す |
| max | 2つの値のうち大きいほうを返す |
| min | 2つの値のうち小さいほうを返す |
| pow | 累乗した結果を返す |
| random | 0.0以上1.0未満の乱数を返す |
| rint | 最も近い整数値を返す |
| sin | サイン値を返す |
| sqrt | 平方根を返す |
| tan | タンジェント値を返す |
この中でも、学習の初期段階で特によく使うのは max、min、abs、pow、sqrt、random あたりです。
まずは max() メソッドから見てみよう
Mathクラスの中でもとても分かりやすいのが max() メソッドです。これは、2つの値のうち大きいほうを返すメソッドです。
たとえば、
Math.max(5, 10)なら、結果は 10 になります。
数値を比較して大きいほうを知りたい場面はとても多いので、max() はかなり実用的です。
シンプルな例で確認しよう
ファイル名:Sample5.java
import java.io.*;
class Sample5
{
public static void main(String[] args) throws IOException
{
// キーボード入力の準備をする
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
// 2つの整数を入力してもらう
System.out.println("2つの点数を入力してください。");
String str1 = br.readLine();
String str2 = br.readLine();
// 文字列を整数に変換する
int num1 = Integer.parseInt(str1);
int num2 = Integer.parseInt(str2);
// 大きいほうの値を調べる
int ans = Math.max(num1, num2);
// 結果を表示する
System.out.println("高い点数は " + ans + " 点です。");
}
}たとえば、次のように入力したとします。
2つの点数を入力してください。
72
88表示結果は次のようになります。
高い点数は 88 点です。このプログラムでは、入力した2つの整数を比較し、大きいほうだけを取り出しています。if文で比較を書くこともできますが、Math.max() を使うと短く分かりやすく書けます。
プログラムの流れを整理しよう
このプログラムの流れを表で整理すると、Math.max() の役割がより見えやすくなります。
| 順番 | 処理内容 | 説明 |
|---|---|---|
| 1 | 文字列として入力を受け取る | キーボード入力は最初は文字列 |
| 2 | Integer.parseInt() で変換する | 計算できる整数にする |
| 3 | Math.max() を呼び出す | 大きいほうの値を調べる |
| 4 | 結果を表示する | 最大値を画面に出す |
ここからも分かるように、Mathクラスはほかのクラスと組み合わせて使うと、とても便利です。
max() はオーバーロードされている
Math.max() は1種類だけではありません。int型どうしを比べるものもあれば、double型どうしを比べるものもあります。これが オーバーロード です。
たとえば、次のように書けます。
Math.max(5, 10);
Math.max(12.5, 20.5);この場合、引数の型に合わせて適切な max() が呼び出されます。
これを表にすると、次のように見られます。
| 呼び出し例 | 使われる考え方 |
|---|---|
| Math.max(5, 10) | int型どうしの比較 |
| Math.max(12.5, 20.5) | double型どうしの比較 |
つまり、同じメソッド名でも、受け取る引数の型に応じて使い分けられているわけです。
min() メソッドもセットで覚えると便利
max() とあわせて覚えたいのが min() です。こちらは、2つの値のうち小さいほうを返します。
Math.min(5, 10)この結果は 5 になります。
max() と min() の違いを整理すると、次のようになります。
| メソッド | 役割 |
|---|---|
| max | 大きいほうを返す |
| min | 小さいほうを返す |
比較処理では、この2つをセットで覚えておくとかなり便利です。
abs() で絶対値を求める
abs() は、絶対値を求めるメソッドです。負の数を正の数として扱いたいときに使います。
Math.abs(-7)この結果は 7 です。
絶対値は、差の大きさを調べたいときなどによく使います。
| 呼び出し例 | 結果 |
|---|---|
| Math.abs(-12) | 12 |
| Math.abs(5) | 5 |
プラスの数はそのまま、マイナスの数は符号を外した値になります。
sqrt() で平方根を求める
sqrt() は平方根を返すメソッドです。
Math.sqrt(25)この結果は 5.0 になります。
平方根は、図形や距離の計算などで使われます。戻り値は double型になるので、その点も意識しておくとよいです。
| 呼び出し例 | 結果 |
|---|---|
| Math.sqrt(9) | 3.0 |
| Math.sqrt(16) | 4.0 |
| Math.sqrt(2) | 1.414... |
pow() で累乗を求める
pow() は、ある数を何乗するかを求めるメソッドです。
Math.pow(2, 3)この結果は 8.0 です。これは 2 の 3乗 を表しています。
| 呼び出し例 | 意味 | 結果 |
|---|---|---|
| Math.pow(2, 3) | 2の3乗 | 8.0 |
| Math.pow(10, 2) | 10の2乗 | 100.0 |
こちらも戻り値は double型です。
random() で乱数を使う
Mathクラスの中でも、とても実用的で楽しいのが random() メソッドです。これは、0.0以上1.0未満の乱数を返します。
Math.random()ただし、このままだと小数なので、欲しい範囲の整数に変える工夫が必要です。
たとえば、1〜6の整数、つまりサイコロの目を作りたいなら、次のようにします。
int num = (int)(Math.random() * 6) + 1;この式の意味を分解するとこうなります。
| 式 | 意味 |
|---|---|
| Math.random() | 0.0以上1.0未満の小数を作る |
| Math.random() * 6 | 0.0以上6.0未満に広げる |
| (int)(...) | 小数部分を切り捨てる |
| + 1 | 1〜6の範囲にする |
これで、1から6までの整数をランダムに得られます。
random() のイメージをつかもう
乱数の変換は少し分かりにくいので、表で見てみると理解しやすいです。
| Math.random() の値 | × 6 の結果 | intに変換後 | +1 の後 |
|---|---|---|---|
| 0.10 | 0.60 | 0 | 1 |
| 0.45 | 2.70 | 2 | 3 |
| 0.92 | 5.52 | 5 | 6 |
この流れを見ると、1〜6の整数ができる理由が見えやすくなります。
ceil() と floor() の違い
Mathクラスには、切り上げや切り下げに使えるメソッドもあります。
| メソッド | 機能 |
|---|---|
| ceil | 指定した値以上の最も小さい整数値を返す |
| floor | 指定した値以下の最も大きい整数値を返す |
たとえば、
Math.ceil(3.2)は 4.0 になり、
Math.floor(3.8)は 3.0 になります。
小数の扱いを整理したいときに便利です。

この図では、中央の Mathクラス から、いくつかの代表的なメソッドが広がる形で表現しています。max() は大きい値、min() は小さい値、abs() は絶対値、sqrt() は平方根、random() は乱数というように、それぞれの役割がひと目で分かる構成です。
特に初心者のうちは、Mathクラスをひとつの便利な計算箱のようにとらえると理解しやすいです。必要な計算に応じて、その中からぴったりのメソッドを呼び出すイメージを持つと、コードが読みやすくなります。
Mathクラスが役立つ場面
Mathクラスは、実際のプログラムでもいろいろな場面で使えます。
| 場面 | 使うメソッドの例 |
|---|---|
| 点数の比較 | max、min |
| 温度差や距離差の大きさ | abs |
| 面積や長さの計算 | sqrt、pow |
| ゲームや抽選 | random |
| 小数の切り上げ・切り下げ | ceil、floor |
つまり、Mathクラスは単なる数学用の知識ではなく、実用的なプログラムづくりのための便利な道具です。
よくある注意点
Mathクラスを使うときには、いくつか意識しておきたい点があります。
| 注意点 | 内容 |
|---|---|
| クラスメソッドとして使う | new は不要 |
| 戻り値の型に注意する | sqrt や pow は double型 |
| random() はそのままだと小数 | 整数にしたいなら変換が必要 |
| max() や min() は型に応じて使い分けられる | オーバーロードされている |
特に、戻り値が int か double かは大切です。見た目が整数っぽくても、実際には double型が返るメソッドも多いので、そこは丁寧に見ておくと安心です。
Mathクラスを使えるようになると、数値の比較、絶対値の取得、累乗、平方根、乱数など、少し高度な計算がぐっと簡単になります。Javaの中には、こうした便利な機能がすでに用意されているので、自分で全部作ろうとせず、必要な場面で上手に使っていくことが大切です。
