🚀

ITスクールの授業6日目のまとめ2:制御文ー条件文(switch - case)

2023/08/02に公開

前書き

今回は条件によってコードを選択的に実行する「制御文」のもう1つの文法、「switch-case」文についてまとめてみる。

if文が範囲や關係演算子がある条件式である場合使いやすいという特徴があるというと、「switch - case」文は形式上に見ると、特定な1つの値ごとにコードを分ける場合使いやすいという特徴がある。

形式が少し違うでかで、基本的な制御文としての機能はif文とほぼ同じなので説明は短いが、例文とその例文で使う他の文法が多いと思う。


switch - case文

switch - case文は、「switch」キーワードと条件式に使うデータを入れて、そのデータの特定な値ごとに各「case」文を作って、switch文のデータの値のよってコードを実行する制御文である。

switch - case文の形式は下記のようである。


switch(値を検査するデータ){

case データの特定な値1:
実行するコード
break;

case データの特定な値2:
実行するコード
break;

.
.
.

default: // if文の「else」と同じ。上のcaseにあたらない値である時実行する。
実行するコード
}

「default」は注釈にも書いてあるが、検査したデータの値が各caseに当たらない場合にコードを実行する。if文の「else」文と同じである。

上記した形式を、実際のコードで書いてみると下記のようになる。

switchCaseExample
int kor = 100;

int eng = 100;
int math = 100;
int total = kor + eng + math;
double avg = (double)total / 3;
char grade = ' ';
int average = (int)(avg / 10);

switch(average) { // 上で演算されたaverageの値によって、
//当たるcaseのコードが実行されるか、当たる値がなかればdefaultのコードが実行される。
case 10:
grade = 'A';
break;
	
case 9:
grade = 'A';
break;
	
case 8:
grade = 'B'; 
break;
		
case 7:
grade = 'C'; 
break;
	
default:
grade = 'F'; 	
}

switch - case文は、当たるcaseが見つかると自分のコードの下にあるcase分を全部実行してしまう。そのせいで、各case文に「break;」を書いて、値に当たるcase文を実行してすぐswitch文を抜け出るようにすることがいい。

「break;」文は、書かれた位置から1番近いブロックのコードを、実行せずにすぐに抜け出るコードである。

上のコードでもう1度まとめてみると下記のようになる。


char grade = ' ';
int average = 9;

switch(average) { // 各case文に、「break;」コードがないことに注目!

case 10:
grade = 'A';
	
case 9:
grade = 'A';

.
.
.

default:
grade = 'F'; 	
}
System.out.println(grade); //caseに当たるコードは「grade = 'A';」である。
//しかし、break;がなくて下のコードを全部実行。出力の結果は「F」になる。

switch - case文の使い方の例文

下記はITスクールで課題として解けてみた、switch - case文の例文である。今まで学んだことない文法やコードを一時的に使った場合があって、注釈でまとめておいた。

1) : 四則演算子を入力して、どんな演算であるかを出力(文字の入力方法付き)

例文の前に、Scannerでは文字1字を入力することができないらしいです。(方法がないのではないですが、他の文法が混ざってしまって、他の方法を取りました。)
それでまず、文字1字を入力する方法を書いておきます。

CheckCalculSymbol

import java.io.IOException;

public class SelectionEx2 {
public static void main(String[] args) throws IOException {
		
//入力
System.out.print("+, -, *, / の中で1つを入力してください : ");
char checkValue = (char)System.in.read();
		
//処理 / 出力
		
switch(checkValue) {
		
	case '+':
	System.out.println("足し算です。");
	break;
		
	case '-':
	System.out.println("引き算です。");
	break;
		
	case '*':
	System.out.println("掛け算です。");
	break;
		
	case '/':
	System.out.println("割り算です。");
	break;
		
	default:
	System.out.println("入力を間違います!");
	}
	}
}

2) 1~12月まで入力して、1~4半期(4半期)を出力

例文の前に、switch - case文で使える有益なコツがあって使ってみた。

public static void main(String[] args) {

		//宣言
		Scanner sc = new Scanner(System.in);
		int input = 0;
	
		//入力
		System.out.print("1 ~ 12までの整数1字を入力してください。: ");
		input = sc.nextInt();
		
		//処理と出力
		switch(input) {
		
		case 1: 
		case 2: 
		case 3: 
		System.out.printf("第1四半期です。");
		//case1~3まで、「"第1四半期です。"が出力」
		break;
		case 4: 
		case 5: 
		case 6: 
		System.out.printf("第2四半期です。";
		//case4~6まで、「"第2四半期です。"が出力」
		break;
		case 7: 
		case 8: 
		case 9: 
		System.out.printf("第3四半期です。";
		//case7~9まで、「"第3四半期です。"が出力」
		break;
		case 10: 
		case 11: 
		case 12: 
		System.out.printf("第4四半期です。";
		//case10~12まで、「"第4四半期です。"が出力」
		break;
		
		default:
		System.out.println("入力が間違います!");
		}
	}

3) 四則演算子(+%演算子)を入力した後、その演算子で入力された2つの実数を演算

この例文は、四則演算しと数字まで入力して、caseごとに他の演算をする例文である。defaultに入って四則演算が実行されなかったときには、boolean型データを使って演算結果が出力されないようにした。

public static void main(String[] args) {

//宣言
Scanner sc=  new Scanner(System.in);
String operatorInput = "";
double input1 = 0.0;
double input2 = 0.0;
double result = 0.0;
boolean isRangeOver = false;

//入力
System.out.print("算数演算子を1字入力してください。(+, -, *, /, %) : ");
operatorInput = sc.nextLine();
System.out.print("1番目の実数を入力してください。(小数点2位まで) : ");
input1 = sc.nextDouble();
System.out.print("2番目の実数を入力してください。 (小数点2位まで) : ");
input2 = sc.nextDouble();

//演算と処理
switch(operatorInput) {
		
		case "+":
		result = input1 + input2;
		break;	
		
		case "-":
		result = input1 - input2;
		break;
			
		case "*":
		result = input1 * input2;
		break;
		
		case "/":
		result = input1 / input2;
		break;
		
		case "%":
		result = input1 % input2;
		break;
			
		default:
		isRangeOver = true;
		System.out.println("演算子の入力が間違います。プログラムを終了します。");
		
		} // switch
		
		//出力
		if(isRangeOver == false)
		System.out.printf("%.2f", result);
		
		//後片付け
		sc.close();
		
	}


以上で、switch - case文の使い方と例文をまとめてみた。

個人的にはswitch - case文よりif文をもっと使う傾向があると思うが、場合によってはcaseで値を明確に指定するほうがもっと読み心地のいいコードになれたと思う。

制御文の分類である「条件文」はこれで終わって、次は反復文についてまとめていくと思う。

Discussion