次のプログラムは 12.3 + 45.6 という計算をして結果を出力します。
class Keisan {
public static void main(String[] args) {
System.out.println(12.3 + 45.6);
}
}
コンパイルして実行してみると,
57.9
と画面に出力されます。
また,
答えは 57.9 です。
と画面に出力するには,次のようにします。
class Keisan {
public static void main(String[] args) {
System.out.println("答えは " + (12.3 + 45.6) + " です。");
}
}
ここでは「+」の記号が三つ使ってあります。真ん中の
(12.3 + 45.6)
が,実際に足し算をする部分です。この結果は 57.9 ですから,この命令全体は
System.out.println("答えは " + 57.9 + " です。");
と書くのと同じことになります。この 57.9 の両側の + は,数の足し算ではなく,単に文字列をつなぎ合わせるだけです。 最終的には
System.out.println("答えは 57.9 です。");
と書いたのと同じことになります。
もし間違って
System.out.println("答えは " + 12.3 + 45.6 + " です。");
としてしまったら,画面には
答えは 12.345.6 です。
のように,単に文字列としてつなぎ合わせたものが出てしまいます。
Java言語の計算では,C言語などと同様に,掛け算は *,割り算は / で表します。また,通常の計算と同じように,次の順番で計算をします。
( ) の中a * b,a / ba + b,a - b注意すべき点は,整数どうしの計算なら,答えも切り捨てて整数にされてしまうことです。たとえば
System.out.println("答えは " + (8 / 3) + " です。");
の答えは 2.666… にならず,切り捨てて 2 になってしまいます。切り捨てられたくなければ,
System.out.println("答えは " + (8.0 / 3) + " です。");
のように,どちらかの数(または両方)に小数点を付けます。
上のプログラムは「答えは 2.6666666666666665 です。」と出力します。末位の数字は正しくないかもしれません(この場合は明らかに正しくありません)。
以上で,Javaの計算の基本は終わりです。このレッスンの残りは,さらに詳しく知りたい人のためのものです。
小数点の付いた非常に大きい値や非常に小さい値は,指数表示になります。たとえば
System.out.println(314159265357989.0);
とすると,
3.14159265357989E14
と出力されます。この3.14159……E14は 3.14159……×1014 の意味です。言い換えれば,E14は小数点を右に14個動かすことです。また
System.out.println(0.00000314159265357989);
とすると,
3.14159265357989E-6
と出力されます。この3.14159……E-6は 3.14159……×10-6 の意味です。言い換えれば,E-6は小数点を左に6個動かすことです。
次のプログラムは2の平方根を計算して出力します。
class Test {
public static void main(String[] args) {
System.out.println("ルート2は " + Math.sqrt(2.0) + "です。");
}
}
実行すると
ルート2は 1.4142135623730951 です。
と画面に現れます。
Math.sqrt() が平方根を求める関数です。これ以外にも次のようなたくさんの関数が使えます。
次のものは引数も含めすべて double 型です。角度の単位はすべてラジアンです。
Math.EMath.PIMath.sin(a)Math.cos(a)Math.tan(a)Math.asin(a)Math.acos(a)Math.atan(a)Math.exp(a)Math.log(a)Math.sqrt(a)Math.IEEEremainder(f1, f2)f1÷f2 の剰余Math.ceil(a)a を超えない最大の整数Math.floor(a)a より小さくない最小の整数Math.rint(a)Math.atan2(a, b)(a, b) の偏角Math.pow(a, b)a の b 乗Math.random()次は,引数が float 型なら返す値は int 型,引数が double
型なら返す値は long 型です。
Math.round(a)a を整数に丸めた値次の三つは,引数が int,long,float,double
のどれでもかまいません。返す値の型は引数の型と同じになります。
Math.abs(a)Math.max(a, b)Math.min(a, b)JDK 1.3 から Math 以外に StrictMath というクラスが新設されました。
StrictMath は,機種依存性をなくすため,Netlib
の fdlibm (Freely Distributable Math Library)
ライブラリのアルゴリズム(計算方法)で計算することになっています。
そのため,StrictMath はCPUによらずまったく同じ結果を与えますが,Math
のほうがより高速でありえます。
もっとも,現状では Math の多くの関数が単に StrictMath
のものを呼び出しているだけです。
三角関数などを多用する場合は,Java より C/C++ のほうが現状では有利です。
Java で計算に使う数値の型には,次のものがあります。
int 型long 型float 型double 型同じ 123 という数値でも,書き方によって,どの型として扱われるかが違います。
123……int 型123L または 123l……long 型123.0 または 123.0d または 123.0D……double 型123.0f または 123.0F……float 型int 型どうしの計算は,答えも int 型の範囲で求められます。int 型の最大値は 2147483647 です。これ以上になると,マイナスの値に折り返されます。たとえば
System.out.println(2147483647 + 1);
を実行すると -2147483648 と出力されてしまいます。
これを避けるには,どちらか(または両方)を long 型にします。
System.out.println(2147483647L + 1);
これなら long 型として計算されるので,2147483648 になります。
float 型と double 型の混合演算の場合も,どちらかが double
であれば結果は double になります。
乱数とは,さいころを振って得られるようなでたらめな数のことです。
Javaで乱数を発生させるには,Math.random() という関数を使うのが一番わかりやすいでしょう。これは0以上1未満のでたらめな数を返してきます。実際にはこれを何倍かして,小数点以下を切り捨てて整数にして使うことが多いと思います。たとえば0から9までのでたらめな整数を作るには,
(int)(10 * Math.random())
のように,10倍して整数化します。もっと具体的なプログラムの形にすれば,
class X {
public static void main(String[] args) {
for (int i = 0; i < 20; i++)
System.out.println((int)(10 * Math.random()));
}
}
を実行すると,0から9までのでたらめな整数が20個出力されます。
クラスやメソッドの名前に strictfp
という修飾語を付けると,その中の浮動小数点演算を厳密に IEEE 754
に従って行います。
Last modified: 2005-12-25 17:33:20