Java入門講座も佳境に入ってきました。
今回紹介する「for文」は、配列と切っても切れない関係にあります。それはfor文がループ処理をおこなうものだからです。
配列については、下記の記事を参照してください。次回の記事で配列を使います。
では、そもそもループ処理とはなんでしょうか?
この記事でわかること
- ループ処理とは何か
- Javaでループ処理をおこなうfor文の使い方
- for文を使い1から10までの合計を求める例
- for文で配列を処理する例
Java入門-ループ処理とは?
まず、ループ処理とは何でしょうか。
「ループ」(Loop)処理とは、プログラムにおいて、繰り返しておこなう処理のことです。繰り返し処理ともいいます。
数学の「総和」(Σ:シグマ)や「総乗」(Π:プロダクト)が使われている計算は、ループ処理で計算ができます。そのほかにもループ処理を用いれば、配列を効率的に扱えます。
Javaで可能なループ処理
- for文(今回扱うもの)
- while文
- do while文
- ForEachメソッドチェーン
javaの「for」文は、非常に柔軟です。javaのfor文が使えれば他のループ処理を覚える必要が無いほどです。私はJavaプログラムで「while」文を記述した記憶が、ほとんどありません。
for文の基本と1から10までの合計の計算
それでは、まずfor文の基本を確認しましょう。
上記は、1から10までの合計を求めて画面に表示するプログラムです。
1から10までの合計を求めるということは、for文で変数iの値を「1,2,3,4,5,6,7,8,9,10」と変化させていき、sumに加算していることが分かるでしょうか。
もう少し細かくfor文についてみていきましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
package org.pmisfbac.java.sample.ifandswitch; /** * @author Beエンジニア */ public class Main { /** * @param args コマンドライン引数 */ public static void main(String[] args) { int sum = 0; for ( int i =1; i <= 10 ; i++ ) { sum += i; } System.out.println(sum); } } |
for文の基本の形
for ( 変数の型 変数名 = 初期値;終了条件;変数の更新処理 ) {
処理;
:
}
ここで注目したいのがforの丸括弧「( )」に含まれる2つのセミコロン「;」の存在です。
ココがポイント
for文では、このセミコロン2つで、カッコ内部を3つに分けています。
- 最初の部分:変数の定義と初期化処理
- 真中の部分:終了条件
- 最後の部分:変数の更新処理
for文では最初に、セミコロンで分けられた前方の「初期化処理」が実行されます。
続けて、セミコロンで分けられた中央の「終了条件に合致するか否か」が判断されます。
for文の判定条件
判定条件が真の状態で処理を継続する場合、「波括弧内部({ })で囲まれた範囲」の処理が実行されます。これらの処理を実行した後、セミコロンで分けられた最後の、「変数の更新処理」がおこなわれます。 なお、ループに際して更新している変数を「カウンタ変数」といいます
for文で配列を処理する
続けて、for文で配列を処理する方法を学びましょう。なお、Java配列の基本については、以下の記事をお読みください。
まず以下のようなデータがあります。なお、ここで定義するデータはすべて架空のものです。
氏名 | 性別 | 得点 |
黒沢 房男 | 男 | 77 |
萩野 一樹 | 男 | 74 |
武藤 彦好 | 男 | 46 |
小山 保子 | 女 | 60 |
下村 克 | 男 | 86 |
小原 仁美 | 女 | 46 |
桶口 雅栄 | 男 | 65 |
藤岡 波子 | 女 | 86 |
黒川 令 | 女 | 47 |
石塚 織枝 | 女 | 69 |
これをJavaでコーディングした例が以下のとおりです。これらのデータを、for文を使ってプログラムで処理しましょう。
for文で配列の内容を出力する
まず、手始めにfor文で配列の内容を出力するプログラムを書いてみましょう。
このプログラムは、見た目通りなのでそこまで難しくないでしょう。配列へアクセスする際の添字として、for文で定義している変数「i」を用いています。なお、forの終了条件として「i < names.length」という記述をしています。
この「names.length」という記述は、配列「names」の要素数(文字数)を取得するものです。この例では、「names.length = 10」という値になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
package org.pmisfbac.java.sample.ifandswitch; /** * @author Beエンジニア */ public class Main { /** * @param args コマンドライン引数 */ public static void main(String[] args) { String[] names = new String[] { "黒沢 房男","萩野 一樹","武藤 彦好","小山 保子","下村 克","小原 仁美", "桶口 雅栄","藤岡 波子","黒川 令","石塚 織枝",}; boolean[] sexes = new boolean[] {true,true,true,false,true,false,true,false,false,false,}; int[] scores = new int[] {77,74,46, 60, 86, 46, 65, 86, 47, 69}; for ( int i =0 ; i < names.length ; i++ ) { System.out.print("氏名:" + names[i]); System.out.print("\t\t性別:" + sexes[i]); System.out.println("\t\t得点:" + scores[i]); } } } |
for文で配列の合計と平均を求める
次に、全体の合計を求めてみましょう。これはさきの例で紹介した「1から10の合計を求める」方法と共通します。
今回はiを直接合計するのではなく、配列の添字にiを指定して合計を求めます。そして、求めた合計を配列の要素数で割って、平均も求めましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
package org.pmisfbac.java.sample.ifandswitch; /** * @author Beエンジニア */ public class Main { /** * @param args コマンドライン引数 */ public static void main(String[] args) { String[] names = new String[] { "黒沢 房男","萩野 一樹","武藤 彦好","小山 保子","下村 克","小原 仁美", "桶口 雅栄","藤岡 波子","黒川 令","石塚 織枝",}; boolean[] sexes = new boolean[] {true,true,true,false,true,false,true,false,false,false,}; int[] scores = new int[] {77,74,46, 60, 86, 46, 65, 86, 47, 69}; int sum = 0; for ( int i =0 ; i < names.length ; i++ ) { sum += scores[i]; System.out.print("氏名:" + names[i]); System.out.print("\t\t性別:" + sexes[i]); System.out.println("\t\t得点:" + scores[i]); } System.out.println("合計:" + sum); System.out.println("平均:" + sum/names.length); } } |
for文とcontinue文
次に、男性のデータのみを処理してみましょう。
for文では、「continue」文を使うことで、処理を途中で飛ばして、次のループ処理へ継続(=continue)することができます。
ここで注目するのは、sexes[i]の値がfalseの場合という条件を書いていることです。この条件が成り立つということは、要は女性のデータということです。
女性のデータの場合、sumなどを計算をせず処理を飛ばして、次のデータを処理させます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
package org.pmisfbac.java.sample.ifandswitch; /** * @author Beエンジニア */ public class Main { /** * @param args コマンドライン引数 */ public static void main(String[] args) { String[] names = new String[] { "黒沢 房男","萩野 一樹","武藤 彦好","小山 保子","下村 克","小原 仁美", "桶口 雅栄","藤岡 波子","黒川 令","石塚 織枝",}; boolean[] sexes = new boolean[] {true,true,true,false,true,false,true,false,false,false,}; int[] scores = new int[] {77,74,46, 60, 86, 46, 65, 86, 47, 69}; int sum = 0; for ( int i =0 ; i < names.length ; i++ ) { if(sexes[i] == false ) { continue; } sum += scores[i]; System.out.print("氏名:" + names[i]); System.out.print("\t\t性別:" + sexes[i]); System.out.println("\t\t得点:" + scores[i]); } System.out.println("合計:" + sum); System.out.println("平均:" + sum/names.length); } } |
for文とbreak文
最後の例として、男性の成績を先頭から3件のみピックアップする処理を書いてみましょう。
これには「break文」を用いて、ループ処理を途中で終了すると楽です。
まず、新たに「malesCount」という変数が追加されています。この変数には、処理した男性の人数が格納されます。最初は誰も処理していないので、0が設定されています。
ループ内部では、女性のデータはcontinue文によってスキップされます。これにより、continue文の付いたif文の後ろに来るのは、男性のデータを処理するときのみになります。
そこで、男性のデータの場合malesCountを1増やします。この結果が3未満であればそのまま処理し、3以上の場合はbreak文を用いてループ処理自体を終了します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
package org.pmisfbac.java.sample.ifandswitch; /** * @author Beエンジニア */ public class Main { /** * @param args コマンドライン引数 */ public static void main(String[] args) { String[] names = new String[] { "黒沢 房男","萩野 一樹","武藤 彦好","小山 保子","下村 克","小原 仁美", "桶口 雅栄","藤岡 波子","黒川 令","石塚 織枝",}; boolean[] sexes = new boolean[] {true,true,true,false,true,false,true,false,false,false,}; int[] scores = new int[] {77,74,46, 60, 86, 46, 65, 86, 47, 69}; int sum = 0; int malesCoount = 0; for ( int i =0 ; i < names.length ; i++ ) { if(sexes[i] == false ) { continue; } malesCoount++; if ( malesCoount > 3) { break; } sum += scores[i]; System.out.print("氏名:" + names[i]); System.out.print("\t\t性別:" + sexes[i]); System.out.println("\t\t得点:" + scores[i]); } System.out.println("合計:" + sum); System.out.println("平均:" + sum/names.length); } } |
まとめ
for文はJavaで複雑な処理を書く上で、また私たちが楽をする上でとても重要な働きをしています。正しく理解して、うまく活用しましょう。
ポイント
- forの基本構造
- for(変数の型 変数名 = 初期値; 終了条件; 変数の更新式) {
繰り返す処理
:
}
- for(変数の型 変数名 = 初期値; 終了条件; 変数の更新式) {
- for文は数学の「総和」や「総乗」の計算に使用できる
- for文は配列を繰り返してデータを処理できる
- for文で特定のデータを読みとばす際に「continue」文を使う
- for文で特定の条件で処理を中断するには「break」文を使う
Javaプログラムの基礎知識(全11記事)
├─Javaとは? Javaの基本概要をわかりやすく解説!
├─IDEとは?エクリプス環境を整えよう!
├─Javaの基本構造とコンパイルの流れを解説!
├─変数、リテラル、基本データ型について?
├─文字列の作成方法とStringのメソッドについて!
├─演算子について!
├─ifとswitchによる条件分岐を理解しよう!
├─ループ処理をおこなうfor文を理解しよう!
├─データをまとめて管理する配列とは?
├─メソッドとメソッドの定義について!
└─Javaに標準装備されている「ライブラリー」を活用しよう!