式と演算子

 前回はJavaについてと変数宣言の文について説明していきました。今回は様々な計算を行うための計算の文について説明していきたいと思います。

計算の文

 まずは以下に具体的な計算のプログラムを示します。

public class Main{
public static void main(String[] args){
int a;
int b;
a = 20;
b = a + 5;
System.out.println(a);
System.out.println(b);
}
}
実行結果
20
25
 このように計算を書くことができます。ここで、「a」、「b」、「5」をJavaを含む多くのプログラミング言語ではオペランドといいます。 また、「+」、「=」を演算子といいます。どんなに複雑な式でもこのオペランドと演算子の2つの要素で構成されます。それではもう少しオペランドについて詳しく見てみたいと思います。 オペランドの中でも数字や文字列など、ソースコードに記述されている具体的な値をリテラルと呼びます。そして、リテラルはデータ型を持っています。このようなリテラルを記述する際は、ときどきエスケープシーケンス と呼ばれるものが使われます。以下にいくつか紹介しておきます。
\" 二重引用符記号(")
\' 引用符記号(')
\\ 円記号(\)
\n 改行
式のオペランドとして利用できるのはリテラルのほかにも「変数」「定数」「命令の実行結果」などがあります。計算をしていくとこのようなオペランドが、どのような順番で計算されていくのかを知る必要があります。 そこで次にその計算の順番について説明していきます。Javaが式に従って計算処理をすることを、式の評価と呼びます。演算子は周囲のオペランドの情報を使って計算を行い、それらオペランドを巻き込んで結果に化けるといったところです。 その時の計算の優先順位は「*」「/」「+」「-」となります。演算子にはこの4つ以外にも様々なものがあります。以下でそれを紹介しておきます。
% 剰余
+= 左辺と右辺を加算して左辺に代入
-= 左辺から右辺を編纂して左辺に代入
*= 左辺と右辺を乗算して左辺に代入
/= 左辺と右辺を徐算して左辺に代入
++ 値を1増やす(インクリメント演算子)
-- 値を1減らす(デクリメント演算子)

型の変換

 ここでは型の変換について説明していきます。Javaは式を評価する過程で自動的に型を変換してくれる機能があります。この型の変換はとても便利な機能です。 原則は、ある型で宣言された変数には、その型しか代入できません。しかし、間違えて型の違う変数を代入してしまったとしても、この機能があればエラーが少なくなります。 これは変数を箱だとイメージしていただくとわかりやすいと思います。「小さい箱」に入るものは、「大きい箱」にも入るのは容易にイメージできると思います。 つまり、「小さな箱」の変数の値を「大きな箱」の変数に代入しても、自動的に箱の大きさが変換されて代入されるということです。各数値型の大小関係は、整数型は「byte型」「short型」「int型」「long型」の順に大きくなっていきます。 浮動小数点型は「float型」「double型」の順に大きくなっています。ここまで変数の型の自動変換を見ていきましたが、演算時の自動型変換もあります。以下に数値型同士の演算時の型変換のルールを示しておきます。

・片方のオペランドがdoubleなら、他方をdoubleに型変換して揃える。
・片方のオペランドがfloatなら、他方をfloatに型変換して揃える。
・片方のオペランドがlongなら、他方をlongに型変換して揃える。
・片方のオペランドがintなら、他方をintに型変換して揃える。
・shortやbyteのオペランドはintに型変換される。

命令実行の文

 話は変わって、命令実行の文について説明していきます。命令実行の文はJavaが準備してくれている様々な命令を呼び出すための文です。 この文を使えば「足し算」や「代入」より、ずっと高度な処理をコンピューターに行わせることができます。いくつか代表的なものを以下に示しておきます。

改行せずに画面に文字を表示

public class Main{
public static void main(String[] args){
String name = "すがわら";
String message;
message = name + "さん、こんにちは";
System.out.println(message);
}
}
実行結果
すがわらさん、こんにちは

2つの値を比較して大きい方の数値を代入する

public class Main{
public static void main(String[] args){
int a = 5;
int b = 3;
int m = Math.max(a,b);
System.out.println(m);
}
}
実行結果
5

文字列を数値に変換する

public class Main{
public static void main(String[] args){
String age = "31";
int n = Integer.parseInt(age);
message = name + "さん、こんにちは";
System.out.println(n+1);
}
}
実行結果
32

乱数を発生させる

public class Main{
public static void main(String[] args){
int r = new java.util.Random().nextInt(9);
System.out.println(r);
}
}
実行結果
0~9のランダムで出る数

キーボードから入力を受け付ける

public class Main{
public static void main(String[] args){
System.out.println("あなたの名前を入力してください。");
String name = new java.util.Scanner(System.in).nextLine();
System.out.println("あなたの年齢を入力してください。");
int age = new java.util.Scanner(System.in).nextInt();
}
}
実行結果
あなたの名前を入力してください
名前を入力する
貴方の年齢を入力してください
年齢を入力する
 ここまで型の変換と命令実行の文を説明していきました。次回は条件分岐と繰り返しについて説明していきたいと思います。