条件によって処理を変えるには,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