【Java初心者】if文とswitch文~分岐処理~

Javaプログラミングにおける分岐処理であるif文とswitch文がどういったものか、使い方、その違いについて簡単に説明していきます。

分岐処理とは

分岐処理とは、ある条件を決めてその条件に合えば指定の処理を行い、条件に合わない場合はその処理を行わない、あるいは別の処理を行うことです。

分岐処理を扱うことによって、計算結果によって違う処理を行ったり、ユーザーが入力した内容によって処理を変えたりと、プログラミングでできることの幅が大きく広がります。

条件: もし明日天気が良かったら
処理: キャンプに出かけよう
条件:もし明日天気が良くなかったら
処理:映画に行こう

if文とは

if文はJavaプログラミングで最もメジャーな分岐処理です。if文の処理は、以下のように大きく3つに分けることができ、状況や行いたい処理に合わせて使い分けます。

・指定した条件に合致した場合のみ処理を行う
・指定した条件に合致した場合とそれ以外の場合で異なる処理を行う
・複数の条件を指定してそれぞれ異なる処理を行う

それぞれについて以下にて説明していきます。

if文

if文は、「もし〜なら〜の処理を行う。」というもし〜という条件に合致した場合にのみ処理を行うという最もシンプルな分岐処理です。
ifの後ろの()に指定する条件を書き、その条件に合致した際に行いたい処理を{}の中に記載します。{}内のことをブロックと言います。

以下のコードでは、if文の条件が「もしaが0ならブロック内の処理を行う」を表し、aの値は0なので「a==0」は「true」に変身し、条件内の処理行います。

int a = 0;

if(a == 0){     
  system.out.println(a);       ⇦条件に当てはまるため、処理を行う。
}

以下のコードは、if文の条件が「もしbが0ならブロック内の処理を行う」という意味ですが、bの値は1であるため、条件に当てはまりません。
if文では条件に当てはまらない場合、そのif文のブロックないの処理を無視して次の処理に移ります。

int b = 1;

if(b == 0){
  system.out.println(b);       ⇦条件に当てはまらないため、処理を無視して通り過ぎる
}

if文は以下の図のように、条件に対してyesであれば処理を行い、noであればその処理を無視する、あるいは避けて通り過ぎるというイメージを持っていれば正しく利用することができるでしょう。

if else文

if else文は「もし〜なら〜の処理を行う。それ以外なら〜の処理を行う」といった条件の文です。if文とは違い、指定した条件の場合とそれ以外の場合で別の処理を行いたい際に用います。if else文は、if文のブロックのすぐ後ろに”else”と記載し、もう一つブロック{}を作成します。elseブロック内にifの条件に当てはまらなかった際に行う処理を記載します。

以下のように、ifの条件に当てはまるのならば処理1を行い、当てはまらない場合はelseブロック内のその他の処理を行う流れとなります。

また、ifブロック内の処理とelseブロック内の処理を両方行うことはありません。ifブロック内の処理を行う場合は、elseブロック内の処理は無視して通り過ぎます。逆も同様です。

int a = 0;
if(a == 0){
処理1
}else{
その他の処理
}

if else文の最大の特徴は、条件に合致していてもいなくても必ず何かしらの処理を行う点です。「明日晴れていたら〜をしよう。それ以外なら〜をしよう。」という文であれば、それ以外という条件の中に、雨/曇り/雪/強風など晴れ以外の全ての条件を含むことができます。

else if文

else if文は、「もし〜なら〜の処理を行う。その他でもし〜なら〜の処理を行う。」という複数の条件を並列して記載する条件式です。if文の後にelse if文を記載し、()内に新たな条件を記載します。

以下のコードのように、else if文を利用すればいくつでも場合分けすることができます。

また、else if文が複数繋がっていてもelse文と同様にその中の1つしか処理が行われないため注意しましょう。

int a = 0;
if(a == 1){
処理1
}else if(a == 2){
処理2
}else if(a == 0){
処理3
}

else if文の優先順位

else if文は前述の通り、いくつでも条件をつなげて分岐することのできる便利な機能です。しかし、注意しなくてはいけないことがあります。
それは、複数の条件式の内容が重複した場合は上に書いてある条件式が優先されるという点です。なぜなら、プログラムは上から順番に実行されるため、分岐処理の中で条件に合致した時点でその分岐を抜けてしまうからです。

以下のコードでは、3つの条件全てを満たしていますが、1つめのif文の条件を満たしているため、処理1を行い、処理2と処理3は無視して通り過ぎてしまいます。

int a = 5;

if(a == 5){
処理1
}else if(a < 6){
処理2
}else if(a >= 4){
処理3
}

if else文とelse if文の合体

if else文とelse if文はそもそもif文に付随して使用しているものですが、この2つを併用することも当然可能です。

「もしAなら〜を行う。もしBなら〜を行う。それ以外なら〜を行う。」という形になり、if else文同様にif文の条件を通った場合には必ずどれか1つの処理を行うことになります。

int a = 3;

if(a == 1){
処理1
}else if(a < 2){
処理2
}else(a >= 3){
処理3
}

switch文とは

switch文とは、具体的な条件によってそれぞれ別の処理を行いたい場合に使用する条件分岐処理の1つです。switch case文とも言われます。

switch文の構成

switch文は、特定の値を指定し、その値の内容に対してそれぞれ条件を値で書き、当てはまった条件ブロック内の処理を行います。

switch文は、条件式ではなく固定値や変数を使用します。
条件に使用できるのは整数、文字列、文字です。少数や真偽値は使えません。

int number = 100:
switch(number){                       ⇦条件として指定する値
  case 100:                                       ⇦case 値: を示している
    処理1
    break;
  case 200:
    処理2
    break;
  case 300:
    処理3
    break;
  default:
    処理4:
}

switch文を構成するのは、switch,case,break,defaultという部品です。
上記コードに沿って順に説明していきます。

switch

switch()は、条件となる値を指定する文で()内に指定したい変数を記載します。()の後には{}を書き、switch文は全てこの{}内に記述します。

case

caseは、「switch()の値が〜だったら以下の処理を行う」を意味し、

case 値:

と記載します。値は条件と同じ型の固定値か変数を指定します。
caseの後ろには、セミコロンではなくコロンをつける点に注意しましょう。

break

breakは、処理を中断してswitch文を抜けることを意味し、各条件内の処理の最後につけます。

switch文は、条件に合致する値を指定しているcaseまで移動し、そこから順次処理を行うものです。つまり、各処理の最後にbreak文を記載しないと該当の条件以下の処理を全て行ってしまうことになるのです。

例えば以下のコードでは、条件のnumberの値が10であるため、case 10:の処理1を行いますが、処理の後にbreakが存在しないために、そのまま処理2も行ってしまい、条件分岐の意味をなさなくなってしまいます。

int number = 10:
switch(number){                      
  case 10:                                     
    処理1                       ⇦breakがない
  case 20:
    処理2
}

default

defaultは、caseの条件全てに当てはまらない場合でも何かしらの処理を行いたい場合に記載します。指定したcaseに当てはまった場合のみ処理を行い、それ以外の場合は何もしたくない場合はdefaultは省略することが可能です。

if文とswitch文の違い

if文とswitch文は、分岐処理という共通点がありますが、使い方や使える場面にいくつか違いがありますのでご紹介いたします。

  • if文は<や>などの大小比較や!=の値がふさわしない場合など幅広い条件を指定することができる
  • swtch文は、左辺と右辺が等しい場合にのみ、==の場合にのみ条件として指定することができる。
  • if文は、整数や文字列だけでなく、少数や真偽値など様々な値を条件式に利用することができる。
  • 条件式として利用できるのは、基本的には整数、文字列、文字のみとなる。
  • if文は「a!=1 && b>=2」のように1つの条件式の中に複数の条件を記載することができる。
  • switch文は、1つの条件式では1つの固定値や変数しか指定できない。

上記を見ていただくとわかる通り、if文の方が使える幅が広く、基本的には条件分岐を使う際にはif文を使用するという認識で問題ないです。

switch文は、if文を使う際にelse ifを利用した分岐が多い、条件が全て==になっている場面などで利用することができますのでたまには使ってみるといいでしょう。

以上、参考になった方ももっと他に知りたい情報がある!という方もご覧いただきありがとうございました!!