Java入門:第5回 処理の制御(while文とfor文)


はじめに

今回は処理の繰返しであるwhile文とfor文について学びます。その前に、処理の流れを確認しましょう。

public class HelloWorld {
  static public  void main(String [] args) {
    //処理
    }
}

Javaではmainメソッドの中に記述した処理(命令:ステートメント)が上から順番に実行されていきます。これらの処理の流れを制御することをフロー制御と言います。フロー制御には繰り返し処理と条件分岐処理の2つがあります。繰り返し処理にはwhile文とfor文の2つがあります。まずwhile文から確認してきましょう。ちなみにwhileは「時間を経過させる」といった意味になります。

1. while文

while(条件) {
    //処理
}

と記述すると()内に記述した「条件」が正しい間、処理を繰返します。例えば次のように記述すると

int x = 0;
while (x<20) {
    System.out.println("x=" + x);
    x = x + 3;
}

と記述すると、「xの値が20より小さい」ということが正しい間、処理を繰返します。

実行すると次のように表示されます。

x=0
x=3
x=6
x=9
x=12
x=15
x=18

【注意】

次のように記述するとうまく行きませんので注意が必要です。

int x = 0;
while(x < 20); {
     System.out.println("x=" + x);
     x = x + 3;
}

このコードはどこに誤りがあるでしょうか、実はこのコード次の次のような処理になっています。

int x = 0;
while(x < 20) //処理A;
{
     System.out.println("x=" + x);
     x = x + 3;
}

while(条件)の後に{}が無い場合は、直後の「処理A」が実行されます。;のみの記述であれば、何も実行しないので、xが0のままなので、処理Aがずっと実行される状況(無限ループ)になります。

2. for文

while文で繰り返し処理を記述した場合は、終了の条件はわかりやすいのですが、処理を何回繰り返したかはわかりにくいです。処理の回数を指定したい場合は、for文という繰返し処理を利用します。for文は次のように記述します。

int x = 0;
for (int i = 0; i < 5; i++) {
     System.out.println(i + "回目の繰返し:x=" + x);
     x = x + 3;
}

実行すると次のように表示されます。

0回目の繰返し:x=0
1回目の繰返し:x=3
2回目の繰返し:x=6
3回目の繰返し:x=9
4回目の繰返し:x=12

for文の()の中の意味は、for(初期値; 終了条件; 継続処理)となりますが、初めはfor(int i = 0; i < 繰返したい回数; i++)と記述し、繰り返す回数を意識するようにしてみましょう。

【補足1:代入演算子】

x = x + 3;

は現在のxに3を足して、xに再度代入するという意味です。次のように記述することも出来ます。

x += 3;

+=の他には、-=や*=、/=などあり代入演算子と呼ばれます。

【補足2:変数の適用範囲】

変数には利用できる範囲が存在します。この範囲のことを変数のスコープといいます。スコープを理解しないと、コンパイルエラーになるので注意しましょう。基本的に変数は定義した{}のブロック内で有効になります。

for (int i = 0; i < 5; i++) {
     System.out.println(i + "回目の繰返し:x=" + x);
     x = x + 3;
}

この場合、変数は、for文の{}内のみで有効なので次のように記述するとコンパイルエラーになります。

●有効範囲外で利用した場合

for (int i = 0; i < 5; i++) {
     System.out.println(i + "回目の繰返し:x=" + x);
     x = x + 3;
}
System.out.println(i);

変数iをfor文の外で利用したい場合は次のように記述します。

int i;
for (i = 0; i < 5; i++) {
     System.out.println(i + "回目の繰返し:x=" + x);
     x = x + 3;
}
System.out.println(i);

●有効範囲内で重複定義した場合

for (int i = 0; i < 5; i++) {
  int i = 10;
     System.out.println(i + "回目の繰返し:x=" + x);
     x = x + 3;
}