Javaを電卓として使う


数字の表示

コンピュータの内部の処理は2進数でおこなわれるということを知っている人 は多いと思うが,プログラムを書く時には人間が理解しやすい10進法を基本と する.数字を表示させるプログラムを書いてみる.
class PrintInt{
  public static void main(String[] args){
    System.out.print("1分は");
    System.out.print(60);
    System.out.println("秒です.");
  }
}
このように,
  System.out.print(60);
として数字60を表示できる.これは,
    System.out.print("60");
とどこが違うのだろうか.出力結果は変わらないが,文字列と数値は意味が違 う.文字列の「"60"」は,「'6'」という文字の後に「'0'」という文字が並ん だ列を表しているのに対し,数値「60」は60という数を表す.数値データは,
class PrintInt{
  public static void main(String[] args){
    System.out.println(60-3);
  }
}
のように四則演算などの計算をさせることが書くことは可能で,実行すると,
ktanaka@nc01921> java PrintInt
57
となるのに対し,
class PrintInt{
  public static void main(String[] args){
    System.out.println("60"-"3");
  }
}
とすると,コンパイル時に
ktanaka@nc01921> javac PrintInt.java
PrintInt.java:3: 演算子 - は java.lang.String,java.lang.String に適用できません。
    System.out.println("60"-"3");
                           ^
エラー 1 個
のようなエラーが出る.なお,
class PrintInt{
  public static void main(String[] args){
    System.out.println("60-3");
  }
}
とするとコンパイルはできるが,出力結果は,
60-3
になる.
上の例では,減算の演算子「-」を用いたが,加算の演算子「+」の場合は話 が違ってくる.
class PrintInt{
  public static void main(String[] args){
    System.out.println("60"+"3");
  }
}
はコンパイルできるが,実行結果は,
603
となる.これは,演算子「+」は数の加算以外に文字列の連結という意味を持っ ているからである.どちらの意味かは,使われ方により決定される.このよう な演算子を多相な(polymorphic)演算子と呼ぶが,多相な演算子に関し ては Java は慎重で,少数の限られた演算子しか導入されていない.

四則演算

小学校で習うような四則演算は一通り行うことができる.四則演算に対応す る演算子をあげる.
+
加算
-
減算
* (発音はアスタリスク (asterisk))
乗算
算数では「X」,数学では「・」とか略して書くことの多い乗算だが,多く のプログラミング言語では,「*」の記号を使って書 くので注意すること.
/ (発音はスラッシュ(slash))
除算
算数では「÷」という記号を使うが多くのプログラミング言語「/」の記号を使う.
%
剰余算
余りを求める.
複雑な計算をする時は以下のように,括弧「()」を使ってどちらを先に計算する かを指定することができる.
class Hours{
  public static void main(String[] args){
    System.out.print("10000秒は");
    System.out.print(10000/(60*60));
    System.out.println("時間です.");
  }
}
ただし,四則演算では数学で使うのと同じように, という優先順位が定められているので,むやみに括弧をつけなくても良い.

プログラムHoursの実行結果は,

10000秒は2時間です.
となるはずだ.2時間は7200秒なので,おかしな結果に見える.

これは,Java言語で整数の計算を基本にしているためである.四則演算の対 象がすべて整数の場合は,演算の結果も整数となる.Java言語では実数を扱う こともできる.実数の定数を表現する時は,小数点をつければ良い.3.0 は数 学の世界では 3 と同じ数を表すが,Java言語の世界では 実数表現の 3 を表 す.

四則演算の際は,対象に実数が含まれている場合は結果は実数となる.した がって,先ほどのプログラムは

class Hours{
  public static void main(String[] args){
    System.out.print("10000秒は");
    System.out.print(10000.0/(60*60));
    System.out.println("時間です.");
  }
}
のように直すと,
10000秒は2.7777777777777777時間です.
と表示される.
整数,実数と言うと複素数とか四元数などを期待する人もいるかもしれな いが,Java言語では基本的な型として採用されていない.

その他の算術演算

数学で使われるような算術演算としては,以下のようなものがある( 詳しくは Mathクラスの解説).
Math.abs
絶対値を計算する.
Math.cos
指定された角度の余弦(cosine)値を返す.
Math.exp
自然対数 eの巾乗の計算
Math.log
自然対数値の計算
Math.sin
指定された角度の正弦(sine)値を返す.
Math.sqrt
平方根を計算する.
Math.tan
指定された角度の正接(tangent)を返す.
これらは,数学の関数と同じように以下のように使うことができる.
class FuncTest {
  public static void main(String[] args){
    System.out.print("sin(1)は");
    System.out.print(Math.sin(1));
    System.out.println("です");
    System.out.print("2の平方根は");
    System.out.print(Math.sqrt(2));
    System.out.println("です");
  }
}
実行結果は以下のようになる.
sin(1)は0.8414709848078965です
2の平方根は1.4142135623730951です
「Math.abs」というのは「Math」クラスの静的メソッド「abs」に対するメ ソッド呼び出しなのだが,その説明は後でやるので,ここでは算術関数をこ う書くとだけ覚えておけば良い.

授業のページに戻る