Java 基本編 3日目

プログラムの基本は、順次処理、分岐処理、反復処理の3つの制御構造から構成されています
これらを適切に組み合わせて、プログラムを作成していきます

前回までは、コンピュータに実行させたい処理を順に書く「順次処理」でプログラムを作成していました
この章では、制御構造の一つである「分岐処理」について説明をしていきます
「分岐処理」とは、ある条件によって実行の流れを変える処理のことです。条件が真の場合と偽の場合で異なる処理を行うことができます

条件分岐

Javaでは、2方向分岐のif文、多方向分岐のelse if文swtich文が存在します

if文

if文は「もし〇〇だったら、△△する」というように、条件が満たされ場合のみ処理を実⾏する場合に使用します
以下の構文のように記述し、()内の条件式が成立した場合、{}で囲まれたブロックの処理を実行します

if (条件式) {
 // 条件式がtrueの場合実⾏する処理
}

条件式には、比較演算子を用いて2つの値を比較することが頻繁にあります
比較演算子は以下の通りです

演算子 読み 書き方 説明
> 大なり a>b aはbより大きいとき真
>= 大なりイコール a>=b aはb以上とき真
< 小なり a<b aはbより小さいとき真
<= 小なりイコール a<=b aはb以下のとき真
== イコール a==b aとbは等しいとき真
!= ノットイコール a!=b aとbは等しくないとき真

※比較演算子は2つの値の大小関係を比較し、真のときにはtrueを、偽のときにはfalseを生成します

以下はif文を使用したサンプルです
このサンプルでは、ageが18未満の値のとき条件式が真となり「未成年です」と出力されます

	if (age < 18) {
		System.out.println("未成年です\n");
	}

if文の流れ図は以下の通りです

【演習問題】

  1. 0から10までの整数を1つ乱数で⽣成し値が10以上なら「10以上です」と表⽰するプログラムを作成しましょう
    なお、乱数の発⽣のさせ⽅は次の通りです
Random rand = new Random();
int randomNumber = rand.nextInt(11); //0から10までの整数を⽣成する
```
実⾏結果
11は10以上の整数です
```
  1. 0から10までの整数を1つ乱数で⽣成し、値が1でなければ「1ではありません」と表⽰するプログラムを作成しましょう
   実⾏結果
   2は1ではありません
  1. 0から100までの整数を1つ乱数で⽣成し、値が20以上80未満のとき「20以上80未満です」と表⽰しましょう
   実⾏結果
   20は20以上80未満です

if~else文

if文の後ろにelesを続けることで、条件式が偽の場合の処理を記述できるようになります
構文は以下の通りです

if (条件式) {
 // 条件式が真の場合実⾏する処理
} else{
  // 条件式が偽の場合実⾏する処理
}

if~else文を用いたサンプルを以下に示します
このサンプルでは、ageが18未満の値のとき条件式が真(true)となり「未成年です」と出力され、ageが18以上のとき「18歳以上です」と出力されます

if (age < 18) {
		System.out.println("未成年です");
} else{
		System.out.println("18歳以上です");
}

if~else文の流れ図は以下の通りです

【演習問題】

  1. 1から10までの整数を乱数で発⽣させ、5以上なら「5以上です」、そうでなければ「5未満です」と表⽰するプログラムを作成しましょう
   実⾏結果
   6は5以上です
  1. 1から10までの整数を乱数で発⽣させ、取得した値が1ではないとき「1ではありません」、そうでなければ「1です」と表⽰するプログラムを作成しましょう
   実⾏結果
   2は1ではありません
  1. 1から100までの整数を乱数で発⽣させ、取得した値が20以上80未満のとき「20以上80未満です」、そうでなければ「範囲外です」と表⽰するプログラムを作成しましょう
   実⾏結果
   75は20以上80未満です

else if文

もし条件が成り立たないときには別の条件で評価をしたい場合、else if文をelseの前に挿入することができます
条件が複数から成る場合は、else ifを使用して処理を書いていきます

構文は以下の通りです

if (条件式1) {
 // 条件式1が真の場合実⾏する処理
} else if (条件式2) {
 // 条件式1が偽で条件2が真の場合実⾏する処理
} else {
 // 条件式1も条件式2も偽のとき実⾏する処理
}

else if文を用いたサンプルを以下に示します
このサンプルでは、x>yが真のとき「xはyより大きいです」と出力し、x<yが真のとき「xはyより小さいです」と出力し、どちらの条件も満たさない場合「xとyは等しいです」と出力します

if (x > y) {
 System.out.println("xはyより⼤きいです");
} else if (x < y) {
 System.out.println("xはyより⼩さいです");
} else {
 System.out.println("xとyは等しいです");
} 

条件分岐の流れ図は以下の通りです

「aの値が10以上かつ20以下である」のように複数の条件を組み合わせた条件式を書く場合、論理演算子を使用します
論理演算子は以下の通りです

演算子 名前 書き方 説明
&& 論理積(かつ) if(a<=0 && b<=0) 両方の条件が成立すれば真
|| 論理和(または) if(a<=0 || b<=0) どちらかの条件が成立すれば真
否定(でない) !(a>0) 真のとき偽。偽のとき真

論理演算子を用いたサンプルを以下に示します

if (x > 3 && x < 20){
 System.out.println("x は3より⼤きく20より⼩さい");
}

x の値が3より大きく かつ 20より小さいとき条件式が真となります

if (x > 10 || y < 20){
 System.out.println("x が10より⼤いか、y が30よりも⼩さい");
}

xの値が10よりおおきい または yの値が20より小さいとき 真となります

if (!(x == 10)){
 System.out.println("xは10と等しくない");
}

xの値が10ではないとき真となります

【演習問題】

  1. 1から4までの整数を定義し、取得した値が1なら「春です」、2なら「夏です」、3なら「秋です」、4なら「冬です」と表⽰するプログラムをif-elseif-else⽂を使⽤して作成しましょう
    ※すべての条件を通るようにテストをしましょう
   実⾏結果
   定義した値:3
   秋です
   定義した値:2
   夏です
   定義した値:1
   春です
   定義した値:4
   冬です
  1. 1から4までの整数を2つ定義し、それぞれ変数a,bに代⼊する。aの⽅が⼤きければ「aの⽅が⼤きいです」、bの⽅が⼤きければ「bの⽅が⼤きいです」、そうでなければ「等しいです」と表⽰するプログラムを作成しましょう
    ※すべての条件を通るようにテストしましょう
  実⾏結果
  b=2の⽅がa=1より⼤きい
  a=3の⽅がb=1より⼤きい
  a=5,b=5は等しいです
  1. 1から100までの数値を定義し、以下の処理を実⾏しましょう
    (1) 80点以上なら”優”と表⽰
    (2) 80点未満、70点以上なら、”良”と表⽰
    (3) 70点未満、60点以上なら、”可”と表⽰
    (4) 60点未満なら、”不可”と表⽰
    ※すべての条件を通るようにテストしましょう
   実⾏結果
   59:不可です
   60:可です
   69:可です
   70:良です
   79:良です
   80:優です
   100:優です

switch文

else ifを用いた多方向分岐で、条件式に==を使い、比較する対象が整数値、文字型、文字列型である場合、switch(スイッチ)文を用いて以下のように書くことができます

構文は以下の通りです

switch() { // switchブロックの始まり
 case 値1: // [式]の値が[値1]のときこれ以降の命令⽂1が実⾏される
   命令⽂1
   break; // switchブロックを抜ける
 case 値2: // [式]の値が[値2]のときこれ以降の命令⽂2が実⾏される
   命令⽂2
   break; // switchブロックを抜ける
 case 値3: // [式]の値が[値3]のときこれ以降の命令⽂3が実⾏される
   命令⽂3
   break; // switchブロックを抜ける
 default: // [式]の値が[値1]から[値3]ではないときこれ以降の命令⽂4が実⾏される
   命令⽂4
   break; // switchブロックを抜ける
} // switchブロックの終わり

それぞれの値に応じて実⾏する処理はcase句で表します
すべての値に合致しない場合に実⾏する処理はdefault句で表します
case,default句の末尾はbreak⽂で終わるのが原則です

Java 12以降の場合は以下のように記述できます

switch() { // switchブロックの始まり
 case 値1 -> {
   命令⽂1
 }
 case 値2 -> {
   命令⽂2
 }
 case 値3 -> {
   命令⽂3
 }
 default -> {
    命令⽂4
 }
 } // switchブロックの終わり

case句のあとに->を記述し{}で一つのブロックを表します
この場合、break文は不要です

switch~case文を用いたサンプルを以下に示します

int b=2;
switch(b){
	case 1->{
        System.out.println("bは1です");
    }
	case 2->{
        System.out.println("bは2です");
    }
	case 3->{
        System.out.println("bは3です");
    }
	default->{
        System.out.println("bは1,2,3以外です");
    }
}

int型の変数「b」が1から3のいずれかの値と一致した場合、それぞれの処理を実行後、switch文を抜けます
1から3のいずれの値とも一致しない場合、default句の処理を実行します

また、case句の中に複数の値をカンマ(,)区切りで記載すると、そのいずれかの値が一致するときに処理を実行します

int month=3;
switch(month){
	case 3,4,5->{
		System.out.println("春です");
    }
	default->{
		System.out.println("春ではありません。");
    }
}

または

switch(month){
	case 3,4,5:
		System.out.println("春です");
		break;

	default:
		System.out.println("春ではありません。");
		break;
}

【演習問題】

  1. 1桁の整数を定義し、1なら「春です」、2なら「夏です」、3なら「秋です」、4なら「冬です」、1から4以外であれば「該当しません」と表⽰するプログラムをswitch⽂を使⽤して作成しましょう
    ※すべての条件を通るようにテストを実施しましょう
   実⾏結果
   整数:1
   春です
   整数:2
   夏です
   整数:3
   秋です
   整数:4
   冬です
   整数:0
   該当しません

コメント

この記事へのコメントはありません。

関連記事

Javaの学習方法

C言語 ~1日目~

Python 基本編 2日目

PAGE TOP