手を動かして学ぶ Java入門 (for文)
環境構築不要! ブラウザから直接コードを実行できます。
本記事では、Java の for文 について学びます。
10分くらいで、さくっと終わる記事をめざしています。
シリーズ一覧
- シリーズ
- 手を動かして学ぶ Java入門 (Hello world 編)
- 手を動かして学ぶ Java入門 (数値と演算)
- 手を動かして学ぶ Java入門 (数値と変数)
- 手を動かして学ぶ Java入門 (コメントの書き方)
- 手を動かして学ぶ Java入門 (文と式の違い)
- 手を動かして学ぶ Java入門 (if文)
- 手を動かして学ぶ Java入門 (if-else文、if-elseif文)
- 手を動かして学ぶ Java入門 (文字列の連結)
- 手を動かして学ぶ Java入門 (while文)
- 手を動かして学ぶ Java入門 (break文)
- 手を動かして学ぶ Java入門 (continue文)
- 手を動かして学ぶ Java入門 (for文)
- 手を動かして学ぶ Java入門 (クラスの超基本)
- 手を動かして学ぶ Java入門 (クラス・メソッド)
- 手を動かして学ぶ Java入門 (クラス・フィールド)
- 手を動かして学ぶ Java入門 (クラス・コンストラクタ)
- 手を動かして学ぶ Java入門 (文字列クラス)
- 手を動かして学ぶ Java入門 (静的メソッド)
- 手を動かして学ぶ Java入門 (静的フィールド)
続きは近日公開予定!
はじめに
この記事は paiza.IO の「Online Java compiler」を利用しています。
2024/11/18 現在、上記環境の Java バージョンは 18 です。(paiza.IO利用ガイド)
実行したコードは paiza.IO で保存および公開されることがあります。
そのため、個人情報などの機密性の高い情報は、コードとして入力しないようにご注意ください。
詳細は paiza.IO の利用規約およびプライバシーポリシーをご確認ください。
for文とは
for文とは、処理を繰り返し実行するための制御文です。
Java の for文は、次のように記述します。
for (初期化処理; 条件式; 更新処理) {
ループ文
}
初期化処理、条件式、更新処理の間はセミコロン (;) で区切ります。
以前の記事 で学んだ while文と似ていますが、for文との違いは、
- 初期化処理
- 更新処理
があるかどうかだけです。
for文をフローチャート図にすると、次のようになります。
それでは、プログラムで実際の動きを確認してみましょう。
コードは変更せずに、そのまま「実行(Ctrl-Enter)」ボタンを押してください。
(表示がおかしいときは「コードの再読み込み」ボタンを押してみてください)
いかがでしたでしょうか? 「出力」のところに
-- for 開始 --
i = 0
i = 1
i = 2
-- for 終了 --
と表示されたら成功です。
コードの解説
それではコードを少しずつ見ていきましょう。
System.out.println("-- for 開始 --");
for (int i = 0; i < 3; i++) {
System.out.println("i = " + i);
}
System.out.println("-- for 終了 --");
まずは for文の前に println メソッドで文字列を表示します。
System.out.println("-- for 開始 --");
次に、for文の 初期化処理 を実行します。
for (int i = 0; i < 3; i++) {
^^^^^^^^^ <--- ★この部分!
...
}
変数 i を宣言して、0 で初期化している箇所ですね。
int i = 0
ノート
- for文の 初期化処理 で使う変数の名前には、慣例的に i がよく使われます。
他の名前をどうしても使いたい! ということでもなければ、i を使っておいたほうが無難でしょう。
次は、条件式の評価です。
ここは while文と同じですね。
for (int i = 0; i < 3; i++) {
^^^^^ <--- ★この部分!
...
}
変数 i は 0 なので、条件式は
0 < 3
となり、条件を 満たしている ことになります。
(0 < 3 は真偽値の true を返します)
for文の条件式が満たされているので、次はループ文が実行されます。
for (...) {
System.out.println("i = " + i); // ループ文
}
ループ文では、変数 i を println メソッドで表示します。
変数 i は 0 なので、"i = 0" と表示されます。
これでループ文の処理は終わりました。
次は、for文の 更新処理 を実行します。
for (int i = 0; i < 3; i++) {
^^^ <--- ★この部分!
...
}
i++ というのは i = i + 1 と同じ意味になります。
つまり、変数 i に 1 を足します。
i++ という書き方は for文でとてもよく使うので、ぜひ覚えておきましょう。
for文の 更新処理 が終わったら、再び for文の条件式の評価に戻ります。
(初期化処理 は実行されません)
for (int i = 0; i < 3; i++) {
^^^^^ <--- 条件式!
...
}
先ほどとは違って変数 i は 1 になっています。
ただし、1 < 3 はまだ条件式を 満たしている ので、またループ文を実行します。
System.out.println("i = " + i); // ループ文
println メソッドで "i = 1" と表示されます。
ループ文が終わったら、次は for文の 更新処理 です。
for (int i = 0; i < 3; i++) {
^^^ <--- 更新処理!
...
}
すると、変数 i に 1 を足すので、i は 2 になります。
再び for文の条件式を評価します。
条件式は 2 < 3 です。条件は満たしているので、またまたループ文と for文の 更新処理 を実行します。
さあ、変数 i は 3 になりました。
再び for文の条件式を評価します。
条件式は 3 < 3 です。これは条件を満たしていません。(3 は 3 より小さくはありません)
そのため、ループ文は 実行せずに for文は終わります。
更新処理 も実行されません。
for (int i = 0; i < 3; i++) {
...
}
System.out.println("-- for 終了 --");
for文が終わったので、最後に println メソッドで "-- for 終了 --" と表示します。
これでプログラムは終了です。
それでは、少し数値をいじったプログラムを動かしてみましょう。
結果がどうなるか予想してから「実行(Ctrl-Enter)」してみてください。
(i-- は i = i - 1 と同じ意味です)
(表示がおかしいときは「コードの再読み込み」ボタンを押してみてください)
break文と continue文
while文で使った
は、もちろん for文でも使えます。
復習もかねて、実際にプログラムを動かして見てみましょう。
結果がどうなるか予想してから「実行(Ctrl-Enter)」してみてください。
for文の条件式が空ですが、これは条件式に true を指定したことと同じになります。
つまり、常に条件を満たします。
(表示がおかしいときは「コードの再読み込み」ボタンを押してみてください)
いかがでしたでしょうか? 「出力」のところに
i = 1
i = 3
i = 5
と表示されたら成功です。
応用問題
【問題】
プログラムを実行すると、
i = 2
i = 4
i = 8
i = 16
と「出力」へ表示されるようにしてください。
プログラム中で書き換えてよいのは2か所です。
for文の 初期化処理 と 更新処理 の ### の部分です。
for (###; i < 20; ###) {
^^^ ^^^
↑ この部分 ↑ この部分
...
}
それでは、下のプログラムの # の箇所を書き換えて「実行(Ctrl-Enter)」してみましょう。
(表示がおかしいときは「コードの再読み込み」ボタンを押してみてください)
無事に、
i = 2
i = 4
i = 8
i = 16
と出力されましたでしょうか?
もし解けなかった場合は、下記の回答例をご参照ください。
回答例
【コード】
public class Main {
public static void main(String[] args) {
for (int i = 2; i < 20; i = i * 2) {
System.out.println("i = " + i);
}
}
}
【出力】
i = 2
i = 4
i = 8
i = 16
まとめ
Java の for文は、次のように記述します。
for (初期化処理; 条件式; 更新処理) {
ループ文
}
- for文開始
- 初期化処理を実行。
- 条件式をチェック。満たしていれば ループ文を実行。満たしていなければ for文は終了。
- ループ文を実行。
- 更新処理を実行。
- 条件式のチェックに戻る。
- 初期化処理を実行。
- for文終了
もう少し詳しいことは「for文の基本 (文法)」の記事でも解説しています。
興味がありましたら、そちらもぜひご参照ください。
次回は「手を動かして学ぶ Java入門 (クラスの超基本)」になります。
関連記事
- シリーズ
- 手を動かして学ぶ Java入門 (Hello world 編)
- 手を動かして学ぶ Java入門 (数値と演算)
- 手を動かして学ぶ Java入門 (数値と変数)
- 手を動かして学ぶ Java入門 (コメントの書き方)
- 手を動かして学ぶ Java入門 (文と式の違い)
- 手を動かして学ぶ Java入門 (if文)
- 手を動かして学ぶ Java入門 (if-else文、if-elseif文)
- 手を動かして学ぶ Java入門 (文字列の連結)
- 手を動かして学ぶ Java入門 (while文)
- 手を動かして学ぶ Java入門 (break文)
- 手を動かして学ぶ Java入門 (continue文)
- 手を動かして学ぶ Java入門 (for文)
- 手を動かして学ぶ Java入門 (クラスの超基本)
- 手を動かして学ぶ Java入門 (クラス・メソッド)
- 手を動かして学ぶ Java入門 (クラス・フィールド)
- 手を動かして学ぶ Java入門 (クラス・コンストラクタ)
- 手を動かして学ぶ Java入門 (文字列クラス)
- 手を動かして学ぶ Java入門 (静的メソッド)
- 手を動かして学ぶ Java入門 (静的フィールド)