この記事では、for文について詳しく解説します。各構文の基本的な使い方から応用例まで、初心者にも分かりやすく説明し、これらの制御構造の違いと適切な使用場面を理解できるようになります。
はじめに
この記事のコードをコピペしてEclipseで出力結果を確認してみよう!
Eclipseインストール方法
for文
for文は、指定された回数だけ処理を繰り返す制御構造で、初期化、条件、更新の3つの式を含みます。
基本構文
Java
for (初期化式; 条件式; 変化式) {
// 繰り返し実行する処理}
}
各要素の役割は以下の通りです:
- 初期化式: ループ変数を初期化します
- 条件式: ループを継続するかどうかを判断する条件を指定します
- 変化式: 各繰り返し後にループ変数を更新します
実行の流れ:
- 初期化式が実行されます
- 条件式が評価されます
- 条件式がtrueの場合、ループ内の処理が実行されます
- 変化式が実行されます
- 2に戻り、条件式が再評価されます
- 条件式がfalseになるまで3-5が繰り返されます
for文:プログラム例
0から9までの数字を出力するfor文
Java
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
出力結果:
0
1
2
3
4
5
6
7
8
9
この例では:
int i = 0
が初期化式i < 10
が条件式i++
が変化式です。
※「i++」 は後置インクリメント演算子と呼ばれ、変数 i の値を1増加させる演算子です。System.out.println()
: 文字列を出力し、最後に改行を加えるメソッドです。
複数の変数の使用
for文では複数の変数を同時に使用することができます:
Java
for (int i = 0, j = 10; i < j; i++, j--) {
System.out.println("i = " + i + ", j = " + j);
}
出力結果:
i = 0, j = 10
i = 1, j = 9
i = 2, j = 8
i = 3, j = 7
i = 4, j = 6
- 初期化部分:
int i = 0, j = 10
- 2つの変数
i
とj
を同時に初期化しています。 - i は 0 から始まります。
j
は 10 から始まります。
- 2つの変数
- 条件部分: i < j
- ループの継続条件を指定します。
- i が j より小さい間、ループが続きます。
- 更新部分: i++, j–
- 各反復後に2つの変数を同時に更新します。
i
は1ずつ増加します(インクリメント)。j
は1ずつ減少します(デクリメント)。
- 実行部分:
System.out.println("i = " + i + ", j = " + j);
System.out.println()
: 文字列を出力し、最後に改行を加えるメソッドです。"i = "
: 文字列リテラルで、i
の値の前に表示されます。+ i
: 変数i
の現在の値を文字列に変換して連結します。+
演算子は、文字列と他の型(この場合は整数)を連結する際に使用されます。", j = "
:i
の値とj
の値を区切るためのカンマと空白、そしてj
の説明を含む文字列です。+ j
: 変数j
の現在の値を文字列に変換して連結します。
for文の入れ子構造
Java
// 外側のループ:iは1から3まで増加します
for (int i = 1; i <= 3; i++) {
// 内側のループ:jは1から3まで増加します
for (int j = 1; j <= 3; j++) {
// 現在のiとjの値を出力します
System.out.println("i = " + i + ", j = " + j);
}
// 内側のループが終わるたびに、この位置に来ます(ただし、ここでは何も実行されません)
}
// 外側のループが終わると、この位置に来ます
出力結果:
i = 1, j = 1
i = 1, j = 2
i = 1, j = 3
i = 2, j = 1
i = 2, j = 2
i = 2, j = 3
i = 3, j = 1
i = 3, j = 2
i = 3, j = 3
- 外側のループ:
int i = 1
で変数 i を1で初期化します。i <= 3
は継続条件で、i が3以下の間ループが続きます。i++
は各繰り返しの後で i を1増やします。
- 内側のループ:
- 外側のループの中にあり、外側のループの各繰り返しで実行されます。
int j = 1
で変数 j を1で初期化します。j <= 3
は継続条件で、j が3以下の間ループが続きます。j++
は各繰り返しの後で j を1増やします。
- System.out.println():
- 現在の i と j の値を画面に出力します。
- これは内側のループの中にあるので、i と j の全ての組み合わせが出力されます。
- ループの実行順序:
- 外側のループが1回実行されるごとに、内側のループが完全に(3回)実行されます。
- 結果として、このコードは3 x 3 = 9回の出力を生成します。
このような入れ子のfor文は、2次元のデータ構造や、複数の要素の組み合わせを扱う際によく使用されます。初心者にとっては、各ループがどのように動作し、どのように相互作用するかを理解することが重要です。
拡張for文(foreach)
配列やコレクションの要素を順に処理する場合に便利です:
Java
// 文字列型の配列 fruits を宣言し、3つの果物の名前で初期化します
String[] fruits = {"apple", "orange", "banana"};
// 拡張for文(for-eachループ)を使用して配列の各要素に対して処理を行います
for (String fruit : fruits) {
// 現在の要素(果物の名前)を出力します
System.out.println(fruit);
}
出力結果:
apple
orange
banana
- 配列の宣言と初期化:
String[] fruits = {"apple", "orange", "banana"};
String[]
は文字列の配列を意味します。fruits
は配列の名前です。- 中括弧
{}
内にカンマで区切って要素を列挙することで、配列を初期化しています。
- 拡張for文(for-eachループ):
for (String fruit : fruits) { ... }
- この構文は「fruitsの中の各要素について、それぞれをfruitとして扱い、以下の処理を行う」という意味です。
String fruit
は現在処理中の要素を表す変数です。:
の後のfruits
は繰り返し処理を行う対象の配列です。
- ループの動作:
- ループは配列の最初の要素から順に進みます。
- 各繰り返しで、現在の要素が
fruit
変数に代入されます。 - 1回目のループでは
fruit
は “apple” - 2回目のループでは
fruit
は “orange” - 3回目のループでは
fruit
は “banana”
- 出力処理:
System.out.println(fruit);
- 現在の
fruit
の値(つまり、現在処理中の果物の名前)を画面に出力します。
- ループの終了:
- 配列の全ての要素を処理し終えると、ループは自動的に終了します。
この拡張for文は、配列やコレクションの全ての要素に対して同じ処理を行う場合に特に便利です。通常のfor文と比べて、インデックスを管理する必要がなく、コードがシンプルになります
まとめ
- for文は、繰り返し回数が明確な場合に適しており、初期化、条件、更新を一行で記述できる効率的な構造です。
- 拡張for文(foreach)は、配列やコレクションの要素を簡単に反復処理できる便利な構文です。
これらの構造を適切に使い分け、組み合わせることで、様々な問題に対応できる柔軟なプログラムを作成することができます。繰り返し構造の理解と適切な使用は、プログラミングスキルの向上に大きく貢献し、より効率的で保守性の高いコードを書く能力を養うことができます。
コメント