繰り返し処理を覚える!Javaのfor文の使い方【初心者向け】現役エンジニアが解説
初心者向けにJavaで書くfor文の使い方について解説しています。繰り返し処理は実際の業務でも使える知識なのでぜひ理解しておきましょう。for文の書き方を説明し、実際に書いた実行結果をもとに解説しています。
テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日 調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名 調査手法:インターネット調査
Javaのfor文について、テックアカデミーのメンター(現役エンジニア)が実際のコードを使用して初心者向けに解説します。
目次
- Javaのfor文って何?
- Javaのfor文とは
- Javaでのfor文の書き方を解説
- Javaで実際にfor文を書いてみよう
- for文の無限ループについて解説
- Javaでfor文を重ねて使う書き方
- Javaの拡張for文で要素を順番に取り出す方法
- まとめ:Javaのfor文で繰り返し処理を習得しよう
- Javaを学習中の方へ
そもそもJavaについてよく分からないという方は、Javaとは何なのか解説した記事を読むとさらに理解が深まります。
Javaのfor文って何?
今回は繰り返し処理に使われるfor文を勉強するよ。
for文を使うとどんなことができるんですか?
for文は決まった回数だけ繰り返すときに使える命令だよ。プログラムを実行する流れを制御する命令の1つなんだ。
繰り返し?どんな時につかうんでしょう?
じゃあ実際にfor文がどんなときに役に立つかプログラムを組んで考えてみよう!
ゆかりちゃん、1から3まで順番に表示するプログラムを作ってくれるかな?
そんなの簡単です!こうですよね?
1から3まで表示するプログラム
class Count { public static void main(String[] args) { System.out.println(1); System.out.println(2); System.out.println(3); }
実行結果
1 2 3
かんたん、かんたん
よくできたね。じゃあ今度は1から1000まで表示するプログラムを作ってくれるかな?
わかりました・・・
コピー貼り付け。コピー貼り付け・・・
1から1000まで表示するプログラム(途中)
class Count { public static void main(String[] args) { System.out.println(1); System.out.println(2); System.out.println(3); System.out.println(4); System.out.println(5); ・ ・ ・ }
わあーーー!めんどくさい!
これは何の罰ゲームですか!(怒)
ごめん、ごめん。嫌がらせをしたかったわけじゃないんだよ。for文を使うと今のプログラムもあっという間に作れるんだよ。数が1万回でも100万回でも!
それはスゴイですね!for文早く覚えたいです!
いいね、それじゃあJavaのfor文の基本的な使い方から見ていこう!
プログラムでは同じ処理を何度も使うときがよくあります。
そんなときに使えるのがfor文の繰り返し処理です。
for文はカウンタ(回数を数える変数)が指定した値の間なら、同じ処理を繰り返してくれる文法です。
繰り返し同じ処理を行って、順番に情報を表示したり計算させたりできます。
本記事ではfor文の基本的な書き方からfor文のネスト(重ねて使う)処理、また配列要素の値をすべて処理する拡張for文についても解説していきます。
Javaを学習し始めたばかりの初心者でも分かりやすいように、実際のコードを見せながら解説しますので、ぜひ最後まで読んで参考にしてください。
for文の中に書く式は覚えにくいかもしれませんが、実際の現場でも使われる大切な文法ですので、何度も書いてみて理解していきましょう。
田島メンター、for文はどのように使うんですか?
for文は決まった回数を繰り返す処理で使われるんだ。似た機能にwhile文というのもあって、繰り返す回数が決まっていない場合に使われるよ。
なるほど。じゃあ、for文は繰り返す回数を指定するんですか?
いい質問だね。for文では回数を数えるためにカウンタになる変数を用意して、カウンタの増減値と条件を決めるんだ。
だから回数を条件にすることもできるし、カウンタを減らしてカウントダウンにしたり、1つおきに数えたりと、アイデア次第でいろいろな繰り返しができるんだ。
まずは、基本の書き方を見てみよう。
Javaのfor文とは
for文はJavaの繰り返し処理のひとつで、カウンタを変化させながら指定した条件内で同じ処理を繰り返し行うときに使用します。
繰り返す条件だけでなく、カウンタの最初の値や増減値を決める必要があります。
Javaでのfor文の書き方を解説
for文は以下のように記述します。
for (初期化式; 条件式; 変化式) {実行する内容;}
初期化式 | 繰り返したい処理に入る前に、カウンタになる変数に最初の値をセットします。同時に、カウンタの変数を宣言できます。 | 例:int i = 1 (iを宣言し1を設定する) |
条件式 | 繰り返し処理を行う前に、繰り返すかどうかを毎回判定する条件を設定します。 | 例:i < 5 (iが5より小さいなら繰り返す) |
変化式 | 繰り返し処理が行われるたびに、カウンタ変数を変化させる処理を記述します。 | 例:i += 3 (3ずつ増加させる) |
変化式を行った結果が条件式の範囲内に当てはまる場合(trueの状態)のみ、”実行する内容”の処理が行われます。
変化式による結果が条件式に当てはまらなくなった場合(falseの状態)、for文による繰り返し処理はそこで終了されます。
(例)カウンタを1から始めて3まで繰り返す場合、繰り返す直前のカウンタ値 i の変化
1回目 | 2回目 | 3回目 | 4回目 | |
---|---|---|---|---|
繰り返す前の 処理 |
初期化式 int i = 1; |
変化式 i++;(1を足す) |
||
カウンタ変数 iの値 |
1 | 2 | 3 | 4 |
条件式 i <= 3 |
true | true | true | false |
繰り返し 処理 |
繰り返す | 繰り返す | 繰り返す | 飛ばして 次の処理へ |
そのため、常に結果がtrueになってしまう場合や、条件式を設定していない場合は無限ループとなり、永久に処理を行ってしまう状態になるのです。
for文はこの3つの式によって成り立っているんだ。
なるほど、「条件式」に当てはまらなくなったらそこで止まるってことですね。
そうだね。もしも他の2つの式が「条件式」にいつまでも到達しない場合は最初に言った通り、永久に処理を行うことになってしまう。
結構、注意が必要な文なんですね。
Javaで実際にfor文を書いてみよう
まず最初に、変数iに1を代入し、iが10よりも小さいか等しい値まで1ずつ加算させていった場合です。
1から、ひとつずつ増やして10以下なら表示する
class Test { public static void main(String[] args) { for(int i = 1; i <= 10; i++) {System.out.println(i);} } }
上記の記述では、各式を以下のように記述しています。
- 初期化式がint i=1(整数の変数iを宣言し、1を代入)
- 条件式がi <= 10(iが10以下か)
- 変化式がi++(1ずつ増加させる)
実行結果は以下のとおりです。
1からひとつずつ数値を増加していき、結果が10になったところで処理が終了します。
実行結果
1 2 3 4 5 6 7 8 9 10
次に同じ条件で、今度は変化式をi += 2(2ずつ加算させる)状態にしてみましょう。
1から、ふたつずつ増やして10以下なら表示する
class Test { public static void main(String[] args) { for(int i = 1; i <= 10; i += 2) {System.out.println(i);} } }
実行結果は以下のとおりです。
実行結果
1 3 5 7 9
最初の1から2ずつ加えていったものが結果として表示され、9で処理が終了します。
10が出力されないのは、繰り返す直前にiが9から11に変化して、10以下なら繰り返すという条件に当てはまらなくなったためです。
for文による繰り返し処理をするためには、数を数えるカウンタとなる変数を初期化し、繰り返し処理の前に条件判定が必要です。
そして、条件を満たしている間はカウンタの値を変化させてから繰り返し処理を行います。
for文の無限ループについて解説
以下のfor文は、永久に処理がループになってしまう場合の例です。
(例)繰り返しが止まらないプログラム
class Test { public static void main(String[] args) { for(int i = 1; i <= 10; i-- ) {System.out.println(i);} } }
先ほどまでと同じ条件で、今度は変化式をi--
(1ずつ減算する)とします。
初期値の1から数値を減算するため、どれだけ変化式を繰り返しても、変数は10よりも小さいか等しい値にしかなりません。
実行結果
実行すると、このようにいつまでも処理が終わりません。
この場合は実行している処理を強制的に終了する(コマンドプロンプトの場合はctrl+c)必要があります。
for文による繰り返し処理を行う場合は条件式・変化式の等号、正や負の数などに特に注意することが大切です。
以上、Javaで書く基本的なfor文の使い方について解説しました。
繰り返し処理は実際の作業でもよく使うコードなので、テストで何度も書いて覚えましょう。
永久ループになってしまう場合の例もやってみたよ。
数値がすごいことになってます!
こうなってしまわないように、演算子の向きや条件式の内容はしっかりと確認しよう。
そうですね、気をつけたいです。
では、基本はここまでにして、for文の応用的な使い方をみていこう!
Javaでfor文を重ねて使う書き方
Javaのfor文のブロックのなかに別のfor文を書いてみましょう。
これは実務でも見かけることがあります。
たとえば、生徒ごとに各教科の合計を計算するとか、横と縦に繰り返して出力するときに使います。
また、配列で多次元(添え字が複数の配列。a[2,5]など)の処理でも使うことができます。
(例)かけ算の九九の表を作成するプログラム
public static void main(String[] args){ int start_num = 1; int end_num = 9; for(int i = start_num; i <= end_num; i++){ for(int j = start_num; j <= end_num; j++){ System.out.print("t" + i * j); } System.out.println(); } }
※t
はタブ文字(一定の間隔で出力位置をそろえる特殊文字)です。
※System.out.println()
は出力と同時に改行を行います。上記のコードでは引数がないので、改行のみ行う命令です。
実行結果
1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81
ここで重要なのは、最初のfor文となる次の部分です。
for(int i = start_num; i <= end_num; i++){
i++という加算部分は、for文処理の最後に加算されます。
そのため、int i = start_num;で指定された変数iの初期値は1から始まり、初回のループ処理(繰り返し処理)では、次のように表示されています。
(実行結果)かけ算の九九の1行目
1 2 3 4 5 6 7 8 9
ここまでは問題ないと思います。
この処理が終了した後、変数iの値に1加算されるため、for文の条件処理である i <= end_num;を判定する際の変数iの値は2になっています。
したがって、i(値は2)と1から9まで繰り返すjを掛けた2回目の処理は次のようになります。
(実行結果)かけ算の九九の2行目
2 4 6 8 10 12 14 16 18
そして、iが10になった時点で、10(i) <= 9(end_num) という条件を満たすことができません。
そのため、変数iが10の時は、for文を終了し、今回のプログラムが完了します。
Javaの拡張for文で要素を順番に取り出す方法
ここまでfor文による繰り返しを見てきたけど、配列でも使えるんだ。もし今まで習った方法で、配列のすべての要素を繰り返す場合はどんなfor文にしたらいいかな?
そうですね。配列の添え字はゼロから始まるからカウンタ変数の初期値は0にします。そして配列の数を調べてから条件にしたらいいんですね。
正解! なんだけど実はもっと便利な方法があるんだよ。拡張for文を使うんだ。配列の要素すべてに対して繰り返してくれるよ。そして今までのようにカウンタの代わりになる変数があるんだ。
へぇ!そんな便利なfor文があるんですね!拡張for文を教えてください!
拡張for文とは
Javaの拡張for文とは、配列の要素(配列内の入れ物)の数だけ繰り返してくれる便利な繰り返し文です。
初期値、条件、変化式を指定する必要がなく、対象となる配列と各要素の値を順番に取り出すための変数を指定します。
※多次元配列(添え字が複数の配列、a[2,5]など)の場合、繰り返しの対象となるのはひとつの次元だけです。たとえばa[2,5]で宣言された二次元配列なら一次元目(a[])か、二次元目(a[][])のどちらかを指定する必要があります。
※他の言語、例えばPHPでは拡張for文はforeach
と呼ばれています。
拡張for文の書き方
拡張for文は以下のように記述します。
for (要素のデータ型 変数名: 繰り返したい配列){ 繰り返す内容; }
要素のデータ型を指定した変数に、配列の個々の要素の値が順番に入ります。
※要素の値が入る変数には通常の変数と同じように代入や変更もできますが、もとになっている配列要素の値には影響ありません。
※要素のデータ型と配列を区切る文字は:(コロン)
です。通常のfor文で使われる;(セミコロン)
ではないので注意してください。
拡張for文の例
(例)得点が入った配列points[]
の要素の値を出力する
public static void main(String[] args){ int points[] = {75, 62, 90, 80, 55}; for(int point: points){ System.out.println(point); } }
実行結果
75 62 90 80 55
上記のコードではpoint
変数にpoints
配列の個々の要素の値が順番に入ります。
このように拡張for文を使えば、初期値や変化式などを指定する必要がなく、すべての要素の値を取得できます。
配列のすべての要素に処理したい場合に使っていきましょう!
まとめ:Javaのfor文で繰り返し処理を習得しよう
今回はJavaのfor文を学習しました。
for文は基本的に、以下を組み合わせることで記述できます。
- 初期化式
- 条件式
- 変化式
- 実行する内容
for文を重ねて使う方法や、拡張for文で配列のすべての要素に対して繰り返すといった、さまざまな使い方があることも分かりましたね。
ちなみに、Javaには繰り返し処理を行うwhile文もありますが、繰り返す回数がわからない繰り返しの場合に使います。
Javaについて復習したいという方は、Javaとは何なのか解説している記事をも用意しています。
Javaのfor文は、繰り返す必要のある他の命令と一緒に使って力を発揮する文です。
本記事を何度も読み返して習得し、次のステップに進んでいきましょう。
Javaの学習サイトもまとめているので、合わせてご覧ください。
Javaを学習中の方へ
これで解説は終了です、お疲れさまでした。
- つまずかず「効率的に」学びたい
- 副業や転職後の「現場で使える」知識やスキルを身につけたい
プログラミングを学習していて、このように思ったことはありませんか?
テックアカデミーのJavaコースでは、第一線で活躍する「プロのエンジニア」が教えているので、効率的に実践的なスキルを完全オンラインでしっかり習得できます。
合格率10%の選考を通過した、選ばれたエンジニアの手厚いサポートを受けながら、JavaやServletの技術を使ったWebアプリケーション開発を学べます。
まずは一度、無料体験で学習の悩みや今後のキャリアについて話してみて、「現役エンジニアから教わること」を実感してみてください。
時間がない方、深く知ってから体験してみたい方は、今スグ見られる説明動画から先に視聴することをおすすめします!