検索

キーワード


【Java】ハンズオンセミナー用コード解説 トレーニング5 繰り返し処理(for文,while文)

  • 公開日:2020-07-10 17:07:34
  • 最終更新日:2021-01-26 09:48:49
【Java】ハンズオンセミナー用コード解説 トレーニング5 繰り返し処理(for文,while文)

こんにちは、駆け出しプログラマーの若江です!

ここでは初学者として学習を終えた私が、アウトプットの意味も込めて繰り返し処理 についてご紹介させていただきます。

できる限り初学者が理解しやすい内容として紹介させていただくので、参考となれば幸いです!


関連記事リンク:配列の紹介 / プリミティブ型の紹介

繰り返し処理(for文、while文)

繰り返し処理とは、決まった条件下にある変数や値に対して条件に一致する限り繰り返し処理を行う構文のことを指します。

ループ処理とも呼ばれています。

自動で様々な処理を行うことができるため、ここでしっかり押さえておきましょう!


for文

for文は「初期化」、「繰り返し条件」、「後処理」の3つで構成されています。

それぞれの役割を見ていきましょう。

・初期化   : for文内で扱う値の初期値を書きます。for文内で最初の1回だけ動作します。

・繰り返し条件: 繰り返しを行う条件を書きます。繰り返し処理中は何度も動作します。

・後処理   : 繰り返し1周毎におこなう処理を書きます。処理を1周完了する度に動作します。

これらを組み合わせて繰り返しを行います。



for文の書き方

for文には決まった式があるので、まずは基本の形を覚えましょう。

・for文の基本形: for( 型 初期値 ; 繰り返し条件 ; 後処理 ){ 処理内容 }


for()内で繰り返し条件を書きます。

{}の中にはループ中に行う動作を書きます。

実際の書き方を見てみましょう。

//変数「i」は整数を保持する変数名としてよく使われます。
for(int i = 0; i < 10; i++){
  
  //for文の上から処理が流れてくる度に「i」の値を表示します。
  //結果は、0 1 2 3 4 5 6 7 8 9 となります。
  System.out.print(i);
}

※intとは整数の「型」のことです。


理解しやすくするために上記サンプルをそれぞれ動作毎に分解してみましょう。

【for】for文で繰り返し処理の宣言をしています。

【int i = 0】int(整数型)の変数 i に 0 を代入して初期値とします。

【i < 10】整数の値を保持した i が10未満であれば処理を続けて行います。

【i++】一通りの処理を1周行うと最後にiへ1を足します。

【System.out.print(i);】処理が1周する度に i の値を表示させます。

これらをまとめると、「i が10以上になるまで1を足し続けて、その間 i の値をループして表示する」

という処理が行われています。



2重ループ

for文の中にまた別のfor文を書くことも可能です。

繰り返し処理の流れは、まず1つ目のfor文①を1周する際に2つ目のfor文②を条件の限り全周します。

for文②を全周し終えると、for文①へ戻り2周目を開始しfor文②を全周します。

上記をfor文①の繰り返し条件に当てはまる限り動作します。

九九を例にサンプルコードを見てみましょう。

//1つ目のfor文①。1の段から9の段までループします。
for (int i = 1; i <= 9; i ++) {

  //2つ目のfor文②。1の位から9の位まで掛け合わせます。
	for (int j = 1; j <= 9; j ++) {
	  System.out.println(i + " × " + j + " = " + (i * j));
	}

}


1つ目のfor文で1の段( i )が開始すると、2つ目のfor文②へ移動して1( i )×1( j )、1( i )×2( j )、1( i )×3( j )…と流れます。

for文②が1( i )×9( j )まで到達すると、for文①は2周目(2の段)を開始します。

再びfor文①の2の段( i )よりfor文②へ移り1~9の位( j )を掛け合わせます。

こうしてfor文①が9の段までループした後、ループから抜けます。

少し複雑ですが、使い方次第でより高度な計算を自動で行うコードが書けるようになります。


※更に階層を深くして3つ目のfor文、4つ目のfor文なども記述可能ですが、

 階層が深くなりすぎることは推奨されていません。



while文

while文もfor文と同じ繰り返し処理を行います。


while文とfor文の違い

前述でも紹介した通りfor文はiが10になるまでといったように繰り返す回数を指定をします。

一方でwhile文は「~の間繰り返す」といったように回数が不確定のものに対してループを行うのに適しています。

・for文 :n回繰り返す

・while文:~の間繰り返す


またwhile文はfor文よりも複雑な前処理(初期値)や後処理ができるため、応用できる幅が広いのも特徴です。

ここではwhile文の基本的な知識を身に着けましょう。



while文の書き方

while文もfor文と同じループをする構文ですので、

以下のように繰り返しの条件を書きます。

・while文の構文: while(繰り返し条件){ 処理内容 }


for文のように初期値と後処理を()内には書きません。

これら初期値や後処理を()外に書くことによって、より複雑な前処理(初期値)や後処理が実現できるようになっています。


上記構文を例に簡単なサンプルコードを見てみましょう。

//初期値0をセット
int i = 0;

// while文の開始。()内で繰り返し条件を記述
while (i < 10) {
  //変数indexを出力
	System.out.println(i);
	//indexに1を足す
	i ++;
}



do while文

while文にはもう一つ「do while文」という構文があります。

基本的な動作はwhile文と変わりませんが、条件に合わなければ実行されない可能性があるwhile文に対して、

do while文は必ず最低1回処理が実行されます。



do while文の書き方

処理内容をdoに記述して、繰り返し条件をwhileに記述します。

・do while文: do{ 処理内容 }while(繰り返し条件)

※doは「{}」、whileは「()」のためコーディングには注意してください。


◆「wihle」と「do while」の記述方法以外は全く同じ繰り返し条件で比較してみましょう。

//初期値が10のため実行されないwhile文
int i = 10;

while (i < 10) {
	System.out.println(i);
	i ++;
}
//初期値が10であっても必ず1回は実行されるdo while文
int i = 10;

do{
    System.out.println(i); //結果:10が表示される
    i ++; // 10に1足す
}while(i < 10); // i(11)が10以上のためwhile文から抜ける




繰り返し処理制御<break, continue>

繰り返し処理に関わるbreakとcontinueを紹介します。

繰り返し処理制御とはループに対して中断や、処理途中で次のループへ移すなどの変化を与えます。

条件を分岐させるif文との相性がよく、ループ途中でif文に通してbreakやcontinueを使うことがあります。

・break  : 処理を中断/抜け出します。

・continue: 処理を強制的に次のループへ移します。

どちらも繰り返し文のコントロールができる便利なツールですから覚えておきましょう。


■breakの使い方

for (int i = 0; i < 10; i ++) {

	if (i >= 4) {
		// break が実行され、現在の繰り返し処理を抜ける
		break;
	}
	//iの値を表示する
	System.out.println(i);
}

この場合、for文によって i が10以上の値になるまで処理を繰り返そうとしますが、

for文の中にあるif文で i が4以上ならbreakすると指定しているため、

i が4になった地点でfor文から抜け出し、

if文の後で表示させようとしている i には 1 2 3 までしか表示されません


■continueの使い方

for (int i = 0; i < 10; i ++) {
				// 偶数判断
	if (i % 2 == 0) {
		// continue が実行されると、以降の処理は行われずに次の繰り返し条件判断に進む
		continue;
	}
	// 
	System.out.println(i);
}

continueの場合、for文によってiが10になるまで繰り返し処理が行われます。

しかし途中にあるif文で、2の余りが0(つまり偶数)なら以降の処理を無視して次のループへ移すため、

if文の後で表示させようとしている i には奇数のみが表示されます。




まとめ

基本的な繰り返し処理にはfor文とwhile文があります。

また2重ループではfor文+for文の組み合わせができますが、for文+while文を組み合わせることなども可能です。

更に繰り返し処理制御のbreakやcontinueを使うことで、より幅広い繰り返し処理を扱えるようになります。


関連記事リンク

配列の紹介 / プリミティブ型の紹介


【著者】

若江

30代で異業種となるIT業界へ転職した駆け出しのプログラマです。これまで主に Java や Ruby、HTML/CSS を使って学習を目的としたショップサイトや掲示板サイトの作成を行いました。プログラマとしての経験が浅いからこそ、未経験者の目線に近い形で基礎の紹介をしていきたいと思います。

よく読まれている記事
【Java】JSPでタグライブラリを使う(JSTL)

【Java】JSPでタグライブラリを使う(JSTL)

こんにちは。エンジニアの新田です!ここでは、システムエンジニアとして働いている私が、システム開発手法や開発言語について紹介していこうと思います。今回は、JSPの標準タグライブラリ「JSTL」について紹介します。Javaについて勉強している方、Webアプリケーションを構築したいと思っている方の参考になれば幸いです!関連記事リンク: 【Java】JSPの基本的な構文/【Java】JSPのアクションタグ

【Java】Stringクラス文字列を操作するメソッドの使い方まとめ!実例も紹介!

【Java】Stringクラス文字列を操作するメソッドの使い方まとめ!実例も紹介!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!そもそもStringとは何?『 String 』... Java言語において文字列のデータ型を指します。基本デ

【Java】文字列の置き換え(String#format)!エスケープシーケンスのまとめも!!

【Java】文字列の置き換え(String#format)!エスケープシーケンスのまとめも!!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!Stringクラスformatメソッドの文字列整形【java.utilパッケージ】Formatterクラスfo

【Java】文字列格納後に変更可能!?StringBufferクラスとStringBuilderクラス!

【Java】文字列格納後に変更可能!?StringBufferクラスとStringBuilderクラス!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者にも✅、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!文字列を扱う3つのクラス【java.langパッケージ】java.langパッケージの文字列を扱うクラスにはS

【Java】値?変数?型??しっかり解説!『データ型(プリミティブ型と参照型)』

【Java】値?変数?型??しっかり解説!『データ型(プリミティブ型と参照型)』

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!プリミティブ型と参照型プログラム開発では型を持った変数を使ってデータのやり取りをしますが、データ型によって仕様