こんにちは。今回はJavaのelise文についてです。else文はif文やelse-if文と合わせて使います。今回はif文とelse文の組み合わせのみについて書きました。if文のブロック内の処理は「条件○○○を満たす場合」に実行する処理です。大雑把に言うと、else文はif文の条件に対して「それ以外の場合」に実行する処理で、if文のブロックの後に記述します
この記事の前半ではelse文の使い方を基本的なサンプルで説明しました。後半ではwhile文の繰り返しの中でelse文を使った応用例のサンプルを作りました。
else文が使える状況
分岐処理でelse文を使うことができる例として、100点満点のテストの点数に対して、合格または不合格のメッセージを生成することを考えます。点数Xに対して、以下のようにメッセージを作るとします。
点数Xの条件 | 生成するメッセージ |
---|---|
Xが80以上 | “今回のテストはX点でした。合格” |
それ以の場合 | “今回のテストはX点でした。不合格” |
「それ以外の場合」という表現は1行目の条件が成り立たない場合という意味で使いました。
点数Xに応じて、上記のようにメッセージを返却するメソッドを作るとします。今回はMyMsgクラスを作り、以下のようにメソッドを実装するとします。
メソッド | 説明 |
---|---|
public static String create(int point) | 引数pointに応じて、メッセージを返却する。 |
- パラメータ:
point
– 点数- 戻り値:
- メッセージ
上記メソッドに点数を渡すと、それに対応した合格または不合格のメッセージを返却してくれるという想定です。単純化のためにstaticメソッドにしています。
else文を使った実装
上記メソッドはif文だけでも実装できますが、今回はelse文を使うという方針にします。メッセージの生成の仕方を以下のように考えました。
-
ローカル変数を宣言する。
型 変数名 初期値 String msg "今回のテストは" + point + "点でした。"
-
以下の分岐処理をする。
条件 処理内容 分岐(1) point >= 80
msg
←msg + "合格"
分岐(2) それ以外の場合 msg
←msg + "不合格"
-
msg
を返却する。
分岐(1)は条件式「point >= 80」を満たす場合の処理です。この分岐はif文に対応します。分岐(2)の「それ以外の場合」とは、(1)の条件式が成り立たない場合という意味です。この分岐はelse文に対応します。
上記フローをJavaで記述する場合、次のように記述します。
構文
if ([条件式]) {
[分岐(1)の処理内容]
} else {
[分岐(2)の処理内容]
}
この構文を使い、分岐処理のプログラムを以下のように作りました。
MyMsgクラス
public class MyMsg {
/**
* @param point 点数
* @return メッセージ
*/
public static String create(int point) {
String msg = "今回のテストは" + point + "点でした。";
if (point >= 80) {
// 分岐(1)
msg += "合格";
} else {
// 分岐(2)
msg += "不合格";
}
return msg;
}
}
分岐(1)はif文のブロックです。「point >= 80」の結果がtrueの場合、分岐(1)の処理が実行されます。
分岐(2)はelse文のブロックです。「point >= 80」の結果がfalseの場合、分岐(2)の処理が実行されます。if文の条件が成り立たない場合に実行されるので、if文の条件に対して、「それ以外の場合」ということです。
if文の条件が成り立つ場合、(1)のみが実行され、(2)は実行されません。if文の条件が成り立たない場合、(1)は実行されず、(2)が実行れます。
以下のように上記クラスのメソッドのテストをしました。
上記サンプルのテスト
public class MyMsgTest {
public static void main(String[] args) {
System.out.println(MyMsg.create(80));
System.out.println(MyMsg.create(79));
}
}
結果
今回のテストは80点でした。合格
今回のテストは79点でした。不合格
1行目はpointが80の場合の出力結果です。if文の条件式の結果がtrueになるため、msgの末尾に”合格”という文言が追加されています。2行目はpointが79の場合の出力結果です。if文の条件式の結果がfalseになるため、else文のブロックが実行されます。そのため、msgの末尾に”不合格”という文言が追加されています。
このように、if文の条件式に対して、「それ以外の場合」の処理をelse文で記述できます。
応用例
以下ではwhile文の中でelse文を使う応用例を作りました。ただし、処理の練習のためだけに思いついたサンプルです。
サンプルの処理内容は以下です。
-
int型変数numを初期値0で宣言する。
-
numが5でない場合、以下の処理を繰り返す。
-
numに0から9までのランダムな値を格納する。
-
String型変数sを以下の形式で初期化する。
“回数: ” + [繰り返し回数] + “, 値: ” + num
-
以下の分岐処理をする。
条件 処理内容 分岐(1) numが5 s
←s + " 当たり"
分岐(2) それ以外の場合 s
←s + " はずれ"
-
sをprintlnで出力する。
-
上記は繰り返し処理の内側で、分岐処理をしています。変数numの値に応じて文字列sの末尾に文言を追加するというものです。
上記の処理を以下のように実装しました。
ソース
import java.util.Random;
public class Sample001 {
public static void main(String[] args) {
Random random = new Random();
int num = 0;
int cnt = 0;
while (num != 5) {
num = random.nextInt(10); // 10未満の乱数
String s = "回数: " + ++cnt + ", 値: " + num;
if (num == 5) {
s += " 当たり";
} else {
s += " はずれ";
}
System.out.println(s);
}
}
}
結果(毎回変わる)
回数: 1, 値: 8 はずれ
回数: 2, 値: 3 はずれ
回数: 3, 値: 1 はずれ
回数: 4, 値: 8 はずれ
回数: 5, 値: 8 はずれ
回数: 6, 値: 2 はずれ
回数: 7, 値: 1 はずれ
回数: 8, 値: 5 当たり
RandomクラスのnextInt()メソッドは引数に指定された数より小さい数をランダムに返却します。今回は10未満の数を変数numに格納しています。その後、numの値が「5に等しい場合」と「それ以外の場合」で分岐処理をしています。
while文では「numの値が5ではない」という条件を記述しているため、numが5の場合、else文が実行され、繰り返し処理は終了です。
以下は余談ですが、else文の波括弧の処理を空にできます。その場合、「それ以外の場合」の処理は特にありません。例えば、以下のように記述できます。
ソース
public class Sample002 {
public static void main(String[] args) {
String s = "Hello.";
boolean flag = false;
if (flag) {
// 条件がtrueの場合
s += " 当たり";
} else {
// それ以外の場合
}
System.out.println(s);
}
}
結果
Hello.
上記ではelse文のブロックに処理は記述していません。if文のブロックでは変数sの末尾に文言を追加しています。出力結果からif文の中の処理は行われなかったことが分かります。
「それ以外の場合」は「特に処理はしない」という状態をソースコードで明示的にしたい場合、このような書き方をすることがあるかもしれません。
以上、参考になれば幸いです。