>>この記事には書き直した新しいページがあります。<<
<<前 [TOP] 次>>
メモ帳を開いて次の繰り返しのプログラムを作ってみましょう。
【WhileTest.java】
public class WhileTest { public static void main ( String[] args ) { System.out.println ( "ループに入る前です。" ); int i = 0; while ( i < 10 ) { System.out.println ( "ここはループの中です。" ); i++; } System.out.println ( "ループの外に出ました。" ); } }
では、プログラムの内容をみていきましょう。
このプログラムでは、while文という構文を使っています。
while ( 条件 ) {
}
もし、whileのあとの括弧()内の条件に当てはまれば、そのあとの中括弧{}内の処理が実行されます。
条件が当てはまっているうちは永遠に中括弧{}内の処理が実行されます。
気をつけなければならないのは、終わらないような条件を入れてしまうと無限ループになってしまうということです。
その場合、コンパイルはできますが、プログラムを実行したときに終わることなく永遠に動き続けてしまいます。
もし、気づかず無限ループになってしまってそのまま実行し、プログラムが止まらなくなってしまったら、コントロールボタン(Ctrl)とCボタンを同時に押す(Ctrl+C)とプログラムを強制終了することができます。
では、プログラムの内容を見ていきましょう。
最初の条件は、次のように宣言されています。
int i = 0;
これは、while文に入る前に宣言し、変数 i を初期化しています。
i=0なのでそのままwhile文の中に入ります。
ここで、次の文が実行されます
i++;
これは、変数 i に 1を足すという意味です。
これを、インクリメントといいます。
このプログラムでは、まず i がインクリメントされて、変数 i の値が1になります。
その後、またwhile文に入り、インクリメントが繰り返されます。
i の値が10になったらループを抜けます。
コンパイルして出力結果を見てみましょう。
もう一つ、違う形のプログラムを見てみましょう。
【WhileTest2.java】
public class WhileTest2 { public static void main ( String[] args ) { int i = 0; int x = 1; while ( true ) { if ( x > 1000000 ) { break; } x *= 2; i++; } System.out.println( "2の" + i + "乗" + " > 1000000" ); } }
ここでは、while文の条件にtrueを使っています。
これを使うと、わざと無限ループを作ることができます。
しかし、このままでは終わらないプログラムになってしまいます。
そこで、「break;」を使います。
この「break」が読まれた時点で、ループから抜けることができます。
このプログラムでは、if文の条件に当てはまるまでループします。
ここで、ちょっと補足します。
次の文を見てください。
if ( x > 1000000 ) { break; }
この文は次のように書き換えることができます。
if ( x > 1000000 ) break;
このように実行文が一行の場合は中括弧{}を省略することができます。
次の文も見てみましょう。
x *= 2;
これは、次の文と同じ意味です。
x = x*2;
どちらで書いても同じですが、x *= 2;と書く方が一般的です。
コンパイルして、出力結果を見てみます。
次のプログラムを見て下さい。
【WhileTest3.java】
public class WhileTest3 { public static void main ( String[] args ) { double x = Math.random(); System.out.println ( "x=" +x ); while ( x < 0.5 ) { x = Math.random (); System.out.println( "x=" +x ); } System.out.println ( "ループから抜けました。" ); } }
0から1.0未満の間で数字がランダムに出てきます。
0.5以上になるまで表示が続き、0.5以上になると「ループから抜けました」とプリントされループを抜けます。
なお、出力結果は一例で、ループにいる回数や数字は実行する度に違います。
WhileTest3.javaと同じ出力結果になるようにプログラムを書き換えてみます。
【WhileTest4.java】
public class WhileTest4 { public static void main ( String[] args ) { double x; while ( (x = Math.random() ) < 0.5 ) { System.out.println ( "x=" + x ); } System.out.println ( "ループから抜けました。" ); } }
do-while文を使って書き換えてみます。
【WhileTest5.java】
public class WhileTest5 { public static void main ( String[] args ) { double x; do { x = Math.random(); System.out.println ( "x=" + x ); } while ( x < 0.5 ); System.out.println ( "ループから抜けました。" ); } }
ここでは、do-while文を使っています。
do { 繰り返しの内容 } while ( 条件 );
while文と機能は同じですが、書き方がちょっと違います。
こんな書き方もあるんだという感じで覚えておいてください。
出力結果は前回のプログラムと同じになります。
これらの応用で、このような繰り返しのプログラムも書けます。
【WhileTest6.java】
public class WhileTest6 { public static void main ( String[] args ) { System.out.println ( "ループの中に入ります。" ); int count = 0; while ( true ) { if ( count > 9 ) { break; } System.out.println ( "ループの中です:" + count ); count++; } System.out.println( "ループから抜けました。" ); } }