Javaの基本(後編)

Java基礎 4

1.本章での学習項目

Javaプログラムを記述する上で最低限必要な基本ルールと基本文法を学習する「Javaの基本」の後編です。
前編では構文ルールやデータ型、演算子などを扱いましたが、後編では条件処理や繰り返しを扱います。

2.本章の講義

本章で学習する内容を動画としてまとめたものです。一通り見終わった後で、学習に入るようにしてください。

講義:Javaの基本②

3.条件分岐処理

条件分岐処理とは、処理をある条件で分岐させたい場合に使う文法です。
通常、プログラムは、上から順に実行されますが、「もし・・・ならば、Aの処理をする」または「Aの処理をしない」というように、処理の流れを分岐させたいことがあります。
また、「もし・・・ならば、Aの処理をする」そして「もし・・・ならば、Bの処理をする」と処理を複数に分岐させたいこともあります。こんなときに使うのが、条件分岐処理です。
条件分岐処理は、大変よく使う構文ですので、しっかりと理解しましょう。

3.1.if文

条件分岐処理で、頻繁に利用される文法が、if文です。
if文は、「もし、条件xにあてはまるのであれば、Aの処理をする」というように処理を分岐させます。
その条件xを記述する際に、比較演算子や論理演算子などを使用します。
条件xの結果がtrue(あてはまる)の場合は、Aの処理を実行することになります。

if文の記述パターンは、いくつかありますので、順番に説明します。

3.1.1.if文

「もし、条件xがtrueの場合、処理Aを実行」のif文の書式は、以下のとおりとなります。

if (条件x) {
	条件xがtrueの場合に実行する処理A
}

条件xがtrueの場合、処理Aが実行されますが、そうでない場合、処理Aは実行されません。


if

プログラムで書くと、以下のようになります。

If1.java
public class If1 {
	public static void main(String[] args) {
		// int型変数xの宣言と10の代入
		int x = 10;

		// int型変数yの宣言と10の代入
		int y = 10;

		// xとyが等しいか否かを判定
		if (x == y) {
			// xとyが等しい(trueである)ため、
			//「Javaは、楽しいです!」を出力
			System.out.println("Javaは、楽しいです!");
		}
	}
}

もう一つのサンプルです。今度は、条件の結果がfalseの場合のプログラムです。

If2.java
public class If2 {
	public static void main(String[] args) { // メインメソッド(後で学習します)
		// int型変数xの宣言と10の代入
		int x = 10;

		// int型変数yの宣言と10の代入
		int y = 10;

		// xはyより小さいか否かを判定
		if (x < y) {
			// xはyより小さくない(falseである)ため、
			//「Javaは、楽しいです!」を出力しない
			System.out.println("Javaは、楽しいです!");
		}
	}
}

if文において、条件分岐の条件として記述する式のことを、条件式と呼びます。
条件式は、結果がboolean型のtrueかfalseでなければいけません。
以下のようなものを、if文の条件式で使用することができます。

  • 関係演算子
  • 論理演算子
  • boolean型の変数、またはtrue、false
3.1.2.if・・・else文

次に説明するif・・・else文は、「もし、条件xがtrueの場合、処理Aを実行し、falseの場合、処理Bを実行」という条件分岐を行いたい場合に使用する文法です。
if・・・else文の書式は、以下のとおりとなります。

if (条件x) {
	条件xがtrueの場合に実行する処理A
} else {
	条件xがfalseの場合に実行する処理B
}

条件xがtrueの場合、処理Aが実行され、そうでない場合は、処理Bが実行されます。
プログラムで書くと、以下のようになります。

If3.java
public class If3 {
	public static void main(String[] args) {
		// int型変数xの宣言と70の代入(合格点)
		int x = 70;

		// int型変数yの宣言と80の代入(テストの点)
		int y = 80;

		// y(テストの点)がx(合格点)より上か否かの判定
		if (x <= y) {
			System.out.println("テストは合格!");

		} else {
			System.out.println("テストは不合格・・・");
		}
	}
}

上記のサンプルプログラムの変数yの値を色々と変更して、条件分岐の結果の違いを確認しましょう。

3.1.3.if・・・else if文

if文の最後は、if・・・else
if文です。「もし、条件xがtrueの場合、処理Aを実行し、そうではない場合で、もし、条件yがtrueの場合、「処理Bを実行」という条件分岐を行いたい場合に使用する文法です。
if・・・else if文の書式は、以下のとおりとなります。

if (条件x) {
	条件xがtrueの場合に実行する処理A
} else if (条件y) {
	条件yがtrueの場合に実行する処理B
}

プログラムで書くと、以下のようになります。

If4.java
public class If4 {
	public static void main(String[] args) {
		int x = 90; // int型変数xの宣言と90の代入(判定A)
		int y = 70; // int型変数yの宣言と70の代入(判定B)
		int z = 60; // int型変数zの宣言と60の代入(判定C)
		int i = 65; // int型変数iの宣言と65の代入(テストの点)

		if (i >= x) { // i(テストの点)がx(判定A)以上か否かの判定
			System.out.println("判定A!");

		} else if (i >= y) { // i(テストの点)がy(判定B)以上か否かの判定
			System.out.println("判定B!");

		} else if (i >= z) { // i(テストの点)がz(判定C)以上か否かの判定
			System.out.println("判定C!");

		} else { // i(テストの点)が不合格である場合の判定
			System.out.println("テストは不合格・・・");
		}
	}
}

上記のサンプルも、変数iの値を変更することにより、出力結果に違いが出ることを確認してください。
また、サンプルソースで書かれているとおり、if・・・else if・・・の最後に、else文を書くと、それまでの条件でtrueにならなかった場合は、else文の処理が実行されます。

if文の説明は、以上です。

3.2.switch文

条件分岐処理の一つとして、if文の他にswitch文というものがあります。
switch文は、「ある変数xが値1ならば、処理A、値2ならば、処理B、値3ならば、処理C・・・」というように処理を分岐させることができます。
switch文の書式は、以下のとおりとなります。

switch(変数または式){
	case 値1 :
		変数または式の値が値1の場合に実行する処理A
		break;
	case 値2 :
		変数または式の値が値2の場合に実行する処理B
		break;
	case 値3 :
		変数または式の値が値3の場合に実行する処理C
		break;
	default :
		変数または式の値が値1から値3以外の場合に実行する処理D
}

プログラムで書くと、以下のようになります。

Switch1.java
public class Switch1 {
	public static void main(String[] args) {
		int i = 4; // int型変数iの宣言と4の代入(現在の月)

		switch (i) {
			case 1: // i(現在の月)が1か否かの判定
				System.out.println("冬です");
				break;
			case 2: // i(現在の月)が2か否かの判定
				System.out.println("あと少しの間は冬です");
				break;
			case 3: // i(現在の月)が3か否かの判定
				System.out.println("もう春です");
				break;
			case 4: // i(現在の月)が4か否かの判定
				System.out.println("春爛漫です");
				break;
			case 5: // i(現在の月)が5か否かの判定
				System.out.println("もうすぐ夏です");
				break;
			case 6: // i(現在の月)が6か否かの判定
				System.out.println("初夏です");
				break;
			case 7: // i(現在の月)が7か否かの判定
				System.out.println("夏です");
				break;
			case 8: // i(現在の月)が8か否かの判定
				System.out.println("夏真っ盛りです");
				break;
			case 9: // i(現在の月)が9か否かの判定
				System.out.println("秋になりました");
				break;
			case 10: // i(現在の月)が10か否かの判定
				System.out.println("秋です");
				break;
			case 11: // i(現在の月)が11か否かの判定
				System.out.println("晩秋です");
				break;
			case 12: // i(現在の月)が12か否かの判定
				System.out.println("冬になりました");
				break;
			default:
			System.out.println("そんな月はありません!");
		}
	}
}

上記のプログラムの変数iを、色々と変更して、出力結果の違いを確認しましょう。
switch文のポイントは、breakを入れることです。
試しに上記のプログラムの「break;」をコメントアウト(前に「//」を入れる)して、プログラムを動作させてみて下さい。
case処理の中に、breakを書かないと、判定がtrueとなるcaseの処理が実行された後、それ以降のcaseの処理も判定に関係なく全て実行されてしまいます。
通常は、breakを書くことによって、どこかのcase処理でtrueとなり、その処理が実行されたら、それ以降のcase処理が実行されないようにします。

以上で、条件分岐処理の説明は終わりです。if文、switch文は、そのときのプログラム仕様に応じて、使い分けます。

4.練習問題3

条件分岐の練習問題です。

4.1.問題1

if・・・else文を利用してプログラムを作成してください。

int型の変数ageを宣言し、自分の年齢を代入してください。
if文を使用して、変数ageが20以上の場合、「立派な大人です。」が画面に表示され、
そうでない場合、「まだまだ子供です。」が画面に表示されるようにしてください。

Mondai11_1.java
/**
 * 処理概要:if・・else文処理(変数ageが20以上の場合とそれ以外の場合で条件分岐)
 */
public class Mondai11_1 {
	public static void main(String[] args) {
		// int型変数ageの宣言と値の代入
		int age = 23;

		// if文による条件分岐
		if (age >= 20) { // 変数ageが20以上のときの処理
			System.out.println("立派な大人です。");
		} else { // 変数ageが20未満のときの処理
			System.out.println("まだまだ子供です。");
		}
	}
}

if・・else文の問題です。
関係演算子を使用して、「age >= 20」という条件で判定をしています。
if文の条件式の結果がtrueの場合、「立派な大人です。」が出力されます。
また、if文の条件式に該当しない場合、else文の処理が実行され、「まだまだ子供です。」が出力されます。

4.2.問題2

if・・else if文を利用してプログラムを作成してください。

  1. int型変数hourを宣言します。
  2. 変数hourに現在の時間を代入します。
  3. if・・else if文を使用して、変数hourが以下のそれぞれの条件に合致する場合、該当のメッセージが画面出力されるようにします。
    • 8から11まで:「おはようございます!今日も一日頑張りましょう。」
    • 12から15まで:「こんにちは。居眠りしないように!」
    • 16から18まで:「あと少し頑張りましょう。」
    • 19から21まで:「お疲れ様。また明日!」
    • それ以外:「頑張り過ぎです。休みましょう。」

※この問題の解答は掲載しておりません。Tech Fun ITスクールのJava研修では、講師が丁寧に解説しています。

4.3.問題3

switch文を利用して問題2と同様の条件分岐となるプログラムを作成してください。

Mondai11_3.java
/**
 * 処理概要:switch文を使用した条件分岐処理(変数hourを条件に各メッセージを出力)
 */
public class Mondai11_3 {
	public static void main(String[] args) {
		// int型変数hourの宣言と現在の時間を表す値の代入
		int hour = 17;

		// 変数hourがそれぞれの条件に合致する場合、該当メッセージ出力
		switch (hour) {
			case 8:  // hourが8時から11時の場合
			case 9:
			case 10:
			case 11:
				System.out.println("おはようございます!今日も一日頑張りましょう。");
				break;
			case 12: // hourが12時から15時の場合
			case 13:
			case 14:
			case 15:
				System.out.println("こんにちは。居眠りしないように!");
				break;
			case 16: // hourが16時から18時の場合
			case 17:
			case 18:
				System.out.println("あと少し頑張りましょう。");
				break;
			case 19: // hourが19時から21時の場合
			case 20:
			case 21:
				System.out.println("お疲れ様。また明日!");
				break;
			default: // hourが上記の時間帯以外の場合
				System.out.println("頑張り過ぎです。休みましょう。");
		}
	}
}

switch文を使ってそれぞれの時間帯ごとに出力するメッセージを変えて条件分岐します。
条件分岐のどれにも当てはまらない場合、default文の処理が実行されます。

5.繰り返し(ループ)処理

次は、プログラム処理の中で、何度も同じ処理を繰り返して行うときの文法を学習します。

繰り返し処理は、ループ処理とも呼ばれています。
繰り返し処理のイメージは、以下のとおりとなります。
変数iが1から始まり、繰り返し処理が行われるたびに、変数iの値が1ずつ増えます。
iが5になるまで、繰り返し処理が続き、「繰り返しています・・・」が4回出力されます。


loop

本項では、for文とwhile文という、2つの繰り返し処理の文法を学習しましょう。

5.1.for文

最初は、for文です。for文は、繰り返し処理の文法の中で、よく使用されます。
for文の書式は、以下のとおりとなります。

for (繰り返しの最初の処理; 繰り返し処理の条件式; 繰り返しの中で毎回実行する処理) {
	繰り返したい処理
}

for文の{}の中に、繰り返したい処理を書きます。また、forの後の()の中は、;(セミコロン)で3つに分かれています。
最初の「繰り返しの最初の処理」は、for文の処理が始まった最初に1回だけ実行される処理です。
次の「繰り返し処理の条件式」は、for文の繰り返し処理を行うか否かを判定する条件式です。
最後の「繰り返しの中で毎回実行される処理」は、繰り返し処理を行うごとに実行される処理です。

文章だけでは分かりにくいため、プログラムの例を一つ紹介します。
以下のプログラムは、int型変数iが1から始まって、繰り返し処理の中で1ずつ数が増えて、5になるまで、その変数iを出力するプログラムです。

For1.java
public class For1 {
	public static void main(String[] args) {
		for (int i = 1; i < 5; i++) { // 変数iが1から5になるまで繰り返し処理
			System.out.println(i); // iの値(1、2、3、4)を出力
		}
	}
}

「System.out.println(i);」が繰り返したい処理で、forの()の「int i = 1;」が繰り返しの最初に処理され、「i < 5;」が繰り返しの条件式で、「i++」は、繰り返し処理ごとに行う処理です。 処理の順番としては、以下のとおりです。

  1. 繰り返しの最初に変数iに1を代入
  2. 「i < 5;」の条件式のtrueの間、「System.out.println(i);」を実行
  3. 「System.out.println(i);」が実行されるたびに、「i++」でiに1を加算
  4. iが5になると、「i < 5;」がfalseになるので、繰り返し処理が終了

変数の値や条件式を変更して、プログラムを動作させてみましょう。for文の処理がより明確に見えてくると思います。

5.2.while文

for文の次は、while文です。while文の書式は、以下のとおりとなります。
for文と比べるとシンプルに見えますが、通常、繰り返しの最初の処理と繰り返しごとに行う処理を別途記述するので、for文より行数が多くなります。

while (繰り返し処理の条件式) {
	繰り返したい処理
}

プログラムで書くと、以下のとおりとなります。
for文で説明したint型変数iが1から始まって、繰り返し処理の中で1ずつ数が増えて、5になるまで、その変数iを出力するプログラムです。

While1.java
public class While1 {
	public static void main(String[] args) {
		int i = 1;
		while (i < 5) { // 変数iが1から5になるまで繰り返し処理
			System.out.println(i); // iの値(1、2、3、4)を出力
			i++; // iの値に1を加算
		}
	}
}

for文で記述したものと同様の結果が出力されたはずです。
同様に、変数の値や条件式を変更して、プログラムを動作させてみてください。

5.3.breakとcontinue

breakやcontinueを使用することによって、繰り返し処理の中で強制的に繰り返し処理を終了したり、強制的に次の繰り返し処理を行ったりすることができます。
繰り返し処理を強制的に終了する場合は、break;を使います。
また、次の繰り返し処理に強制的に処理をとばす場合、continue;を使います。

以下は、breakのプログラムのサンプルです。

Break1.java
public class Break1 {
	public static void main(String[] args) {
		int i = 1; // for文の初期処理であるiの定義と代入

		// 変数iが1から5になるまで繰り返し処理(初期処理の記述は、省略)
		for ( ; i < 5; i++) {
			System.out.println(i); // iの値(1、2、3)を出力
			if (i == 3) { // もし、iが3の場合
				break; // ここで、繰り返し処理終了
			}
		}
		System.out.println("iが" + i + "になったので、処理終了!");
	}
}

以下は、continueのプログラムのサンプルです。

Continue1.java
public class Continue1 {
	public static void main(String[] args) {
		for (int i = 1; i < 5; i++) { // 変数iが1から5になるまで繰り返し処理
			if (i == 3) { // もし、iが3の場合
				// この先の出力処理をとばして、次の繰り返しへ
				continue;
			}
			System.out.println(i); // iの値(1、2、4)を出力
		}
	}
}

breakやcontinueは、繰り返しの処理の中で使用すると、より色々な処理の流れを作りだすことができます。

Information

無限ループに注意!

繰り返し処理で、永久にループが止まらないことを無限ループと言います。

例えば、条件式の指定を忘れてしまった、i++を忘れてしまった等、小さなミスが理由でも無限ループは発生します。
条件式を忘れるなどは、あまりに注意不足と言えますが、ちょっとした書き間違いでも繰り返し処理は無限ループとなってしまいますので、気をつけましょう。
それでも無限ループになってしまった場合は、eclipseのコンソールの上に表示される赤い四角のボタンを押して、処理を強制終了するようにしましょう。
放っておくと、コンピュータのメモリがいっぱいになり、コンピュータの処理が遅くなります。遅くなった場合は、再起動をしてみましょう。


mugenloop

6.練習問題4

6.1.問題1

「for文」を使用して、九九の7の段が表示されるプログラムを作成してください。

九九の7の段

7*1=7
7*2=14
:    :
7*9=63

Mondai13_1.java
/**
 * 処理概要:for文を使用した繰り返し処理(九九の7の段の出力)
 */
public class Mondai13_1 {
	public static void main(String[] args) {
		// int型定数DANの宣言と値7の代入
		final int DAN = 7;

		// 「九九の7の段」を出力
		System.out.println("九九の7の段");

		// 7の段を出力
		for (int i = 1; i <= 9; i++) {
			System.out.println(DAN + " * " + i + " = " + (DAN * i));
		}
	}
}

まず最初に九九の段を格納するint型の定数DANを定義します。
九九の段については、この処理の中で変更しませんので、定数で定義したほうが良いでしょう。

for文を使用して、1から9まで変数iをカウントアップします。
カウントアップとは、カウントダウンに対して、だんだんと数値が増えていくことを意味します。

変数iと定数DANを使って、計算を行いながら、九九の7の段を出力します。
変数iが1の時、「DAN + ” * ” + i + ” = ” + (DAN * i)」で「7 * 1 = 7」が出力されます。
変数iが2の時、「7 * 2 = 14」が出力されます。

6.2.問題2

「while文」を使用して、問題1のプログラムを作成してください。

Mondai13_2.java
/**
 * 処理概要:while文を使用した繰り返し処理(九九の7の段の出力)
 */
public class Mondai13_2 {
	public static void main(String[] args) {
		// int型定数DANの宣言と値7の代入
		final int DAN = 7;

		// 「九九の7の段」を出力
		System.out.println("九九の7の段");

		// 変数iの宣言と値1の代入
		int i = 1;

		// 7の段を出力
		while (i <= 9) {
			System.out.println(DAN + " * " + i + " = " + (DAN * i));
			i++;
		}
	}
}

for文の処理と基本的に変わりはありません。

while文の場合、初期処理である変数iの宣言と値の代入は、繰り返しの処理が始まる前に記述します。
また、変数iのインクリメント処理は、while文の繰り返し処理の最後に記述します。

6.3.問題3

「for文」を使用して、1から10までの数を加算し、その結果を「合計は、55です。」と画面に表示してください。

実装のヒント:
・for文の実行後に合計値を表示する必要があるので、合計値を格納するための変数はfor文より前で宣言しましょう。

※この問題の解答は掲載しておりません。Tech Fun ITスクールのJava研修では、講師が丁寧に解説しています。

6.4.問題4

「while文」を使用して、問題3のプログラムを作成してください。

※この問題の解答は掲載しておりません。Tech Fun ITスクールのJava研修では、講師が丁寧に解説しています。

7.Javaの基本(前編・後編)のまとめ

  • 命令文の終わり(基本的には行末)にはセミコロンを付ける。
  • 処理のまとまりは「{}(括弧)」で囲む。
  • コンソールに表示する時は「System.out.println(“出力したい文字列”);」を使う。
  • 変数宣言は「int x;」のように「データ型 変数名;」とし、代入するときは「x = 2;」などとする。
  • 「データ型」は、数値や文字列など扱うデータの種類によって使い分けが必要である。
  • 加減乗除はそれぞれ「+」、「-」、「*」、「/」の「算術演算子」を使用する。剰余(余り)は「%」を使用する。
  • 数値を1増やしたり減らしたりするときは「++」や「–」を使用する。
  • 2つの変数の比較には「==」や「!=」、「>=」などの「関係演算子」を使用する。
  • 複数の条件を記述する際には「&&」や「||」の「論理演算子」を使用する。
  • 様々な条件によって処理を分岐させる場合は、「if文」や「switch文」などを使用する。
  • 繰り返し処理を行う場合は「for文」や「while文」を使用する。

本章で学んだことをもとに、今後の学習を進めていきます。
しっかりと理解できているか不安な場合は、教材のサンプルをもう一度動かしてみるなどして復習しておくと良いでしょう。

Javaの基本的な文法とルールについての説明は、以上です。

執筆・編集

Tech Fun Magazine編集部
Tech Funの現役のITエンジニアが、システム開発の基礎知識や実践的なノウハウを執筆・編集しています。
Tech Fun ITスクールの研修講師として活躍するメンバーもおり、プログラミング初心者がつまづきやすいポイントを丁寧に解説しています。

ARTICLE
記事一覧

Java基礎

Java12からJava17までに導入された機能の紹介

システム開発の基本

プログラミングとテストの要点

データベース環境構築

データベース環境構築(Windows版) テストデータ作成

データベース環境構築

データベース環境構築(Windows版) MariaDBの設定

データベース環境構築

データベース環境構築(Mac版) テストデータ作成

データベース環境構築

データベース環境構築(Mac版) MariaDBの設定

Java基礎

はじめてのJava

Java基礎

Javaのデバッグ方法

Java基礎

ポリモフィズム

記事一覧を見る