前回に引き続き今回はJavaの繰り返しについて書いていこうと思います。
前回のVol.4も重要なので、初心者は要チェックです。
Javaの初心者向けおすすめ本
スッキリわかるJava入門 第3版 (スッキリシリーズ)
#繰り返し
繰り返しとは、そのままですが「何度も処理を繰り返す」ことを言います。
プログラムの世界では超頻出です。
例えば
- 同じ数式で全社員の給与計算をする
- 動画を再生し終えたら、次の動画を自動再生する
- 100ページのPDFとして100人分の社員情報を印字する
etc
など、他にも山ほどあると思いますが、これらも何らかの処理を複数回実行するために、
この**「繰り返し」処理**を実行しています。
では実際にコードで書いていきましょう。
前回のあいさつのプログラムを使います。
#プログラム実装
Greeting.javaを開きましょう。
まず、greetingIfというメソッドを作り、ifの部分をメソッド化しておきましょう。
ifからgreetingSwitchの直前までをctrlキーを押しながらマウスでスクロールし、
if文の部分を選択したら、右クリックでRefactor > Extract Methodと選択してください。
Method Name:にはgreetingIfと入れてOKを押しましょう。
すると、eclipseが勝手にメソッドを作成してくれたと思います。
これを「リファクタリング」「リファクタ」と言ったりします。
代替の場合は動作(Input/Output)を変えずにコードを書き換えることを言います。
エンジニアやプログラマの現場では頻出単語なので、覚えましょう。
package JavaTutorial;
public class Greeting {
public static void main(String[] args) {
String timeZone = "朝";
greetingIf(timeZone);
greetingSwitch(timeZone);
}
private static void greetingIf(String timeZone) {
if (timeZone.equals("朝")) {
System.out.println("Good Morning World!");
} else if (timeZone.equals("昼")) {
System.out.println("Hello World!");
} else if (timeZone.equals("夜")) {
System.out.println("Good Evening World!");
}
}
private static void greetingSwitch(String timeZone) {
switch (timeZone) {
case "朝":
System.out.println("Good Morning World!");
break;
case "昼":
System.out.println("Hello World!");
break;
case "夜":
System.out.println("Good Evening World!");
break;
}
}
}
全体がこんな感じになっていればOKです。
続いて繰り返し処理を書いていきましょう。
繰り返し処理を書くときはforを使います。
mainメソッドのtimeZoneの次の行にforとタイプしてみてください。
for - use index for array
というやつを選びます。すると
for (int i = 0; i < args.length; i++) {
}
こんな奴が出てきたと思います。これが一番基本的なfor文です。
日本語訳すると、
i を0からargsの長さまで繰り返し実行する、その時1回実行毎に iは1ずつ増加していく
という感じです。
今回はargsの中には何も持っていないので、args.lengthの部分を3に書き換えましょう。
for (int i = 0; i < 3; i++) {
}
こうなります。
で、最後に、forの中にgreetingIfとgreetingswitchを入れて見ましょう。
public static void main(String[] args) {
String timeZone = "朝";
for (int i = 0; i < 3; i++) {
greetingIf(timeZone);
greetingSwitch(timeZone);
}
}
メインクラスはこのようになります。
では実行してみましょう
Good Morning World!
Good Morning World!
Good Morning World!
Good Morning World!
Good Morning World!
Good Morning World!
のように6回出てくれば成功です。
##アレンジ
これでは面白くないので
iが何番のときなのかを把握するためにforの中でiを使ってみましょう。
System.out.println(i + 1 + "周目");
というコードをforのすぐ後ろに書いてみましょう。
public static void main(String[] args) {
String timeZone = "朝";
for (int i = 0; i < 3; i++) {
System.out.println(i + 1 + "周目");
greetingIf(timeZone);
greetingSwitch(timeZone);
}
}
こんな感じで実行してみてください。
1周目
Good Morning World!
Good Morning World!
2周目
Good Morning World!
Good Morning World!
3周目
Good Morning World!
Good Morning World!
こうなります。確かにiが1個ずつ増えて3週回ったら終わっていることがわかるかと思います。
##さらにアレンジ
今度は1週目は朝、2週目は昼、3週目は夜となるようにしていきます。
String[] timeZones= {"朝","昼","夜"};
String timeZone = "朝";
のように、上にtimeZonesという配列を宣言してください。
そして、for文の3としたところをtimeZones.lengthに書き換えます。
public static void main(String[] args) {
String[] timeZones = { "朝", "昼", "夜" };
String timeZone = "朝";
for (int i = 0; i < timeZones.length; i++) {
System.out.println(i + 1 + "周目");
greetingIf(timeZone);
greetingSwitch(timeZone);
}
}
最後にforのすぐ後ろに
String timeZone = timeZones[i];
としてもともとの
String timeZone = "朝";
は消しましょう。
public static void main(String[] args) {
// 配列を宣言
String[] timeZones = { "朝", "昼", "夜" };
// timeZones.lengthまで回す
for (int i = 0; i < timeZones.length; i++) {
// timeZonesの中身のi番目を取得する(配列は1番目が0、2番目が1、・・・となります)
String timeZone = timeZones[i];
// 配列から取得したtimeZoneで挨拶を出力していく
System.out.println(i + 1 + "周目");
greetingIf(timeZone);
greetingSwitch(timeZone);
}
}
こんな感じになります。
では実行してみましょう。
1周目
Good Morning World!
Good Morning World!
2周目
Hello World!
Hello World!
3周目
Good Evening World!
Good Evening World!
こんな感じになっていれば完璧です。
#最後に
for文には様々な書き方があります。拡張for文、streamなど。
また、forだけでなくwhile文というものもあります。
兎に角書き方が豊富である=必要な場面が多い
という事なので、ぜひ今回のコードが他に書きようないかいろいろ試してみてください。