【Java開発】第3回 条件分岐

#初めに

皆さん。こんにちは！

DreamHanksの254cmです。

今回は条件分岐について説明していきます。

Java記事のまとめは[こちら](https://qiita.com/DreamHanks/items/6b1996e1f8ed66bbd456)です。

前回の記事は[【Java開発】第2回 演算子](https://qiita.com/drafts/44bc9c06dc355f9ce60c/edit)です。

##条件分岐

条件分岐は条件を満足するかによって実行させる処理を分けることです。

Javaで提供される条件分岐は四つあります。

　・if文
　・if/else文
　・if/else if/else文
　・switch文

##if

```java
if(条件式){
    処理..
}

```

if文は条件式の結果がtrueの場合、「**{}**」括弧の処理が実行されます。

falseの場合には何も実行されません。

サンプルを見ながら説明します。

```java
int a = 10;

if(a > 5) {
    System.out.println("aは5より大きいです。");
}
```

上記のソースコードを実行してみると、

変数 aの値は10なので上記のif文の条件「**a > 5**」は満足されます。

ですから、上記のif文のコード「**System.out.println("aは5より大きいです。");**」が実行され、

**aは5より大きいです。**が出力されます。

```java
int a = 10;

if(a > 11) {
    System.out.println("aは11より大きいです。");
}
```

しかし、上記のif文の場合、aの値は10なので条件式「**a > 11**」は満足されません。

ですから、上記のif文のコード「**System.out.println("aは11より大きいです。");**」は実行されません。

※上記の**System.out.println();**というものは括弧の中にあるものを画面に出力するものです。

##if/else

```java
if (条件式){			
  条件式がtrueの場合に実行さえる処理		
  ...			
}

else {			
  条件式がfalseの場合に実行さえる処理						
  ...			
}			
```

if文と一緒に使われるelse文はif文の条件がfalseの場合だけ実行されます。

サンプルを見ながら説明します。

```java
int a = 10;

if(a == 10) {
    System.out.println("aは10です。");
}
else {
    System.out.println("aは10ではありません。");
}
```

上記のソースコードを実行してみると、

変数 aの値は10なので上記のif/else文の条件「**a == 10**」は満足されます。

ですから、上記のif/else文はif文の方が実行され、**aは10です。**が出力されます。

```java
int a = 10;

if(a == 7) {
    System.out.println("aは7です。");
}
else {
    System.out.println("aは7ではありません。");
}
```
上記のコードの場合、変数a の値は10であり、条件式「**a == 7**」は満足されません。

ですから、上記のif/else文はelse文の方が実行され、**aは10ではありません。**が出力されます。

##if/else if/else

if/else if/elseはif/else文の中にもう一個の条件式を追加したものです。

つまり、if/else文が重なった形と言えます。

そして、if/else if/else文を使うと必要な条件がいくつでも表現できます。

サンプルを見ながら説明します。



```java
int a = 5;

if( a > 5 ) {
    System.out.println("aは5より大きいです。");
} else if( a < 5 ) {
    System.out.println("aは5より少ないです。");
} else {
    System.out.println("aは5です。");
} 
```

これからは条件式が二つ以上になるので、プログラムの実行順序に合わせて説明します。

プログラムは上から順に実行されるので、変数aを宣言と初期化してif文の条件式を確認します。

すると、aの値は10であり、if文の条件式「**a > 5**」は満足されません。

なので、次の条件式を確認します。

次の条件式(else if)は「**a < 5**」であり、これも満足できません。

そして、ifもelse ifの条件も満足できなかったので、自動的にelse文の処理が実行されます。

もう一度、他のサンプルを見ながら説明します。

```java
int a = 3

if( a == 1 ) {
    System.out.println("aの値は1です。");
} else if( a == 2 ) {
    System.out.println("aの値は2です。");
} else if( a == 3 ) {
    System.out.println("aの値は3です。");
} else if( a == 4 ) {
    System.out.println("aの値は4です。");
} else if( a == 5 ) {
    System.out.println("aの値は5です。");
} else {
    System.out.println("aの値は不明です。");
}
```

上記のソースコードを実行してみると、

整数型の変数 aを宣言および初期化します。

そしてif/else if/elseを上から順に確認され、下記の順に動作されます。

①　if( a == 1 ) aは3なので満足できない

②　else if( a == 2 )　aは3なので満足できない

③　else if( a == 3 )　aは3なので満足される

④　else if( a == 3 ) 中の処理**System.out.println("aの値は3です。");**を実行する

⑤　else if( a == 3 )が実行されたので、else if( a == 3 )下のelse if/elseは実行されない。

##switch

いくつかの条件があってもif/eles if/else文を分かると表現できますが、

if/else if/elseで数多くの条件を表現するとぱっとみて意味を把握することが難しいです。

そういう状況を対応するためにJavaはswitchという条件分岐を提供します。

```java
switch (条件値){		
  case 値1:		
    条件値と値1が一致した場合に実行する処理;		
    ...		
    break;		
  case 値2:		
    条件値と値2が一致した場合に実行する処理;		
    ...		
    break;		
  default:		
    何も一致しなかった場合に実行する処理;				
    ...		
    break;
}
```	
switch文は条件値の結果によって異なる処理を実行させる条件分岐です。

こういうswitch文はif/else if/else文より見やすいし、処理される時間も早いです。

しかし、switch文の条件値はbyte型、short型、char型、int型または後で勉強するラッパークラスByte, Short, Character, Integerしか使えません。

ですから、switch文はif/else文より汎用性に劣ります。

switch文は条件値とcaseの値を比較して二つの値が一致するcaseの処理を実行します。

defaultは条件値がどのcaseとも一致されなかった場合しか実行されません。if/elseのelseに似たようなものです。

サンプルを見ながら説明します。

```java
int a = 2;

switch (a){		
  case 1:		
    System.out.println("aの値は1です。");		
    break;		
  case 2:		
    System.out.println("aの値は2です。");			
    break;		
  default:		
    System.out.println("aの値は不明です。");
    break;					
}
```
上記のソースコードを実行してみると

変数aが初期化され、switch文の条件値になります。

条件値の値が2なので、case 2の処理が実行され、

**aの値は2です。**が出力されます。

switch文では「**break**」というものがありますが、

次回ループを扱う記事でもっと詳しく説明しますが、今のところではcaseを終了させるものと理解すればOKです。

このbreak文がなくなると実行されたcaseと該当caseいかにあるcaseが全部実行されます

サンプルを見ながら説明します。

```java
int a = 1;

switch (a){		
  case 1:		
    System.out.println("aの値は1です。");				
  case 2:		
    System.out.println("aの値は2です。");					
  default:		
    System.out.println("aの値は不明です。");				
}
```
さっきのサンプルではcase 2の処理が実行されてからswitch文は終了されますが、

上記のサンプルはbreak文がなくなっています。

なので、case 1が実行されてから終了されていなく、case 2とdefaultも実行されます。

つまり、「**aの値は1です。**」「**aの値は2です。**」「**aの値は不明です。**」三つ全部が出力されます。

#終わりに

今回の記事は以上になります。

次回はJavaの[ループ](https://qiita.com/DreamHanks/items/772aa8d63a748a70e33c)を学びましょう。

私たちの最新の記事は[こちら](http://blog.dreamhanks.com/java%e5%85%a5%e9%96%80%e8%ac%9b%e5%ba%a7/)で確認することができます。

ご覧いただきありがとうございます。