条件によって処理を変えるには,if(イフ)や else(エルス)を使います。 まず実例を見てみましょう。
class Test { public static void main(String[] args) { int x = 17; // この数をいろいろ変えてやってみてね if (x < 10) { // もし x < 20 なら System.out.println("x は 10 より小さい"); } else if (x < 20) { // そうでなく,もし x < 20 なら System.out.println("x は 20 より小さい"); } else { // そうでなければ System.out.println("x は 20 以上である"); } } }
if と else は
if (何々) { // もし何々なら .... // 何々が成り立つとき実行する命令 }
あるいは
if (何々) { // もし何々なら .... // 何々が成り立つとき実行する命令 } else { // そうでなければ .... // 何々が成り立たないとき実行する命令 }
あるいは
if (A) { // もし A なら .... // A が成り立つとき実行する命令 } else if (B) { // そうでなければ,もし B なら .... // A が成り立たず,B が成り立つとき実行する命令 } else { // そうでなければ .... // A も B も成り立たないとき実行する命令 }
などのような形で使います。
if の次の ( )
の中には次のような条件式が入ります。
a == b (a と b は等しい) a != b (a と b は等しくない) a < b (a は b より小さい) a > b (a は b より大きい) a <= b (a は b より小さいか等しい) a >= b (a は b より大きいか等しい)
この最初の a == b
は a = b
と間違わないように注意してください。
a = b
では「a に b の値を代入する」という意味になってしまい,エラーになります。
比較は ==
,代入は =
と覚えてください。
if や else の直後の { }
の中に命令が一つしかないなら,{ }
を省略してもかまいません。
つまり,さきほどのプログラムは次のように書いてもかまいません。
if (x < 10) System.out.println("x は 10 より小さい"); else if (x < 20) System.out.println("x は 20 より小さい"); else System.out.println("x は 20 以上である");
ある条件が満たされている間,何かの処理を繰り返すには,while(ホワイル)という命令を使い,
while (条件) { 繰り返し実行したい命令 }
のようにします。繰返しのことをループともいいます。
たとえば次のプログラムを見てください。
class Test { public static void main(String[] args) { int i = 1; // 変数 i を作り,初期値を 1 とする while (i <= 5) { // i ≦ 5 なら System.out.println(i); // i の値を出力 i = i + 1; // i を 1 だけ増やす } // while の頭に戻って繰り返す } }
これを実行すると,画面に
1 2 3 4 5
と出力されます。
慣れないと難しいのは i = i + 1;
でしょう。
これは
今までの i の値に 1 を加えたものを新たに i に代入する
という意味です。言い換えれば,
i の値を 1 だけ増やす
ということです。つまり,
1 だったら 2 にする,2 だったら 3 にする,……
というわけです。
数学の式だと考えたら i = i + 1;
は理解できません。
i + 1 を計算 → i に代入
というようにとらえなければなりません。
この
i = i + 1;
という命令は非常によく使うので,
i++; または ++i;
と略記してよいことになっています。 この略記法を使えば,さきほどのプログラムは次のように書けます。
class Test { public static void main(String[] args) { int i = 1; // 変数 i を作り,初期値を 1 とする while (i <= 5) { // i ≦ 5 なら System.out.println(i); // i の値を出力 i++; // i を 1 だけ増やす } // while の頭に戻って繰り返す } }
また,
i = i + n;
もよく使うので,
i += n;
と略記してよいことになっています。
要するに,
i++; ++i; i += 1; i = i + 1;
はみな同じことです。 ただし i++ と ++i は,別の計算の中で使ったときに,意味が微妙に違います。 これについては後で説明します。
上の例もそうですが,
i = 1; // i に初期値を与える while (i <= 5) { // i が何らかの条件を満たせば System.out.println(i); // i について何かをする i++; // i を増やす } // 繰り返す
のような流れのプログラムは非常に多いので,これを次のように略記してもいいことになっています。
for (i = 1; i <= 5; i++) { // i が 1 から 5 まで System.out.println(i); // i について何かをする } // 繰り返す
この略記法は非常に多く使われますので,ぜひマスターしてください。
また,変数 i を作るのもまとめて
for (int i = 1; i <= 5; i++) { // i が 1 から 5 まで System.out.println(i); // i について何かをする } // 繰り返す
のようにもできます。 こうして for の中で作った変数は,この for ループの中でしか使えません。
なお,while でも for でも,中かっこ { }
の中の命令がたった一つなら,中かっこ { }
を省略して
for (int i = 1; i <= 5; i++) System.out.println(i);
のように書くことができます。
次のプログラムは 1 から 10 までの整数の和を求めます。
class Test { public static void main(String[] args) { int sum = 0; for (int i = 1; i <= 10; i++) sum += i; System.out.println("合計: " + sum); } }
1,3,5,7,9 と数を一つ飛びに出力するには
for (int i = 1; i <= 10; i += 2) System.out.println(i);
とします。
また,10 から 1 に向かってカウントダウンするには
for (int i = 10; i >= 1; i--) System.out.println(i);
とします。
この i--
は i = i - 1
と同じことで,値を 1 だけ減らします。
次のようにすれば何が出力されるでしょうか?
for (int i = 1; i <= 100; i *= 2) System.out.println(i);
この i *= 2
は i = i * 2
と同じことです。
for は,数を出力する必要がなくても,同じメッセージを何回か出力するのによく使われます。 たとえば「ごめんなさい」を10回出力するには
for (i = 1; i <= 10; i++) System.out.println("ごめんなさい");
とします。もっとも,Java言語のプログラマはこれをむしろ
for (i = 0; i < 10; i++) System.out.println("ごめんなさい");
のように書くのがふつうです。 つまり数は 0 から数え始めるのです。
永久にループする無限ループは,次のようにします。
while (true) { System.out.print("ほげ"); }
画面に「ほげほげほげ……」と永久に出力します。 あわてて電源を切らないでください。 Ctrl-C(コントロールキーを押し下げた状態で c のキーをたたくこと)で終了します。
for でも while でも,break 命令を使えばいつでもループから脱出できます。 たとえば
double x; while (true) { // 以下を繰り返す: x = Math.random(); // x に0〜1の乱数を入れる if (x > 0.99) break; // x > 0.99 ならループ脱出 System.out.println(x); // x の値を出力 }
のように使います。 Math.random() は 0 以上 1 未満の乱数(でたらめな数)を返すメソッドです。
なお,これは次のようにも書けます。
double x; while (true) { if ((x = Math.random()) > 0.99) break; System.out.println(x); }
つまり,代入文をかっこで囲んでその値を調べるわけです。 ちょっとややこしい書き方ですが,よく使います。
上の書き方が理解できれば,これは次のようにも書けることがおわかりでしょう。
double x; while ((x = Math.random()) <= 0.99) System.out.println(x);
では次はどうでしょうか。
int i = 0; while ((i = i + 1) <= 10) System.out.println(i);
これは次のようにも書けます。
int i = 0; while (++i <= 10) System.out.println(i);
この while (++i <= 10)
は,i を 1
だけ増やして,その(増やした後の)値が 10 以下であれば繰り返すということです。
次のものは,似ていますが,ちょっと違います。
int i = 0; while (i++ <= 10) System.out.println(i);
この while (i++ <= 10)
は,i を 1 だけ増やして,増やす前の値が 10
以下であれば繰り返すということです。
減らす方の --i
と i--
も同じ関係にあります。
for や while より使われていませんが,do という繰返し命令もあります。 これは
do { 繰り返し実行したい命令 } while (条件);
のように,条件判定が普通の while と違って最後に来ます。 たとえば
int i = 1; do { System.out.println(i); i = i + 1; } while (i <= 5);
のように使います。 これは
int i = 1; while (true) { System.out.println(i); i = i + 1; if (i > 5) break; }
と同じことになります。
Last modified: 2005-09-22 15:36:04