学生向けプログラミング入門 | 無料

学生向けにプログラミングを無料で解説。Java、C++、Ruby、PHP、データベース、Ruby on Rails, Python, Django

Java | 07 | while

↓↓クリックして頂けると励みになります。




06 | if】 << 【ホーム】 >> 【08 | for



繰り返しのプログラム while
繰り返しのプログラム while



Javaのプログラミングにおいて、whileは繰り返し処理を行うための制御構造の一つです。
while文は、指定した条件が真である限り、中括弧内{}のコードブロックを繰り返し実行します。
注意点として、無限ループにならないように十分注意する必要があります。
条件が永遠に真であれば、プログラムは永遠に実行されるためです。




Visual Studio Codeで以下のプログラムを作成します。
ファイル名は「WhileTest.java」とします。


新規作成 【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になったらループを抜けます。


コンパイルして出力結果を見てみましょう。

~/Desktop/Programming/JP $ javac WhileTest.java 

~/Desktop/Programming/JP $ java WhileTest
     
ループに入る前です。
ここはループの中です。
ここはループの中です。
ここはループの中です。
ここはループの中です。
ここはループの中です。
ここはループの中です。
ここはループの中です。
ここはループの中です。
ここはループの中です。
ここはループの中です。
ループの外に出ました。



違うWhile文のJavaプログラムを見てみます。
Visual Studio Codeで「WhileTest2.java」という名前のファイルを作成し、以下の内容を記述して下さい。


新規作成 【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;と書く方が一般的です。


コンパイルして出力結果を見てみます。

~/Desktop/Programming/JP $ javac WhileTest2.java

~/Desktop/Programming/JP $ java WhileTest2
     
220乗 > 1000000



次のプログラムをVisual Studio Codeで作成して下さい。
ファイル名は「WhileTest3.java」とします。


新規作成 【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以上になると「ループから抜けました」と出力されてループを抜けます。


なお出力結果は一例で、ループにいる回数や数字はランダムですので実行する度に違います。

~/Desktop/Programming/JP $ javac WhileTest3.java

~/Desktop/Programming/JP $ java WhileTest3
     
x=0.2293286756357995
x=0.42645036524885194
x=0.281941461086784
x=0.7505476799947981
ループから抜けました。



「WhileTest3.java」と同じ出力結果になるようにプログラムを書き換えてみます。
Visual Studio Codeで以下のような「WhileTest4.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 ( "ループから抜けました。" ); 
	} 
}


~/Desktop/Programming/JP $ javac WhileTest4.java

~/Desktop/Programming/JP $ java WhileTest4     
ループから抜けました。

~/Desktop/Programming/JP $ java WhileTest4
x=0.030489204747029874
x=0.05391577646030621
ループから抜けました。



do-while文を使って書き換えてみます。
Visual Studio Codeで以下のような「WhileTest5.java」を作成して下さい。


新規作成 【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文と機能は同じですが、書き方がちょっと違います。
Javaにおけるwhileとdo-whileは、両方とも繰り返し処理を行うためのループ構造ですが、主な違いはループの最初に条件を評価するかどうかです。
whileループは、ループ内のブロックを実行する前に条件を評価します。
つまり、条件が最初から偽の場合、一度もループの本体が実行されません。
do-whileループは、ループの本体をまず一度実行し、その後に条件を評価します。
このため、最低でも一度はループの本体が実行されます。


出力結果は前回のプログラムと同じになります。

~/Desktop/Programming/JP $ javac WhileTest5.java

~/Desktop/Programming/JP $ java WhileTest5     
x=0.7506769736025489
ループから抜けました。

~/Desktop/Programming/JP $ java WhileTest5
x=0.22436053401536804
x=0.7657902895249429
ループから抜けました。



これらの応用で、このような繰り返しのプログラムも書けます。
Visual Studio Codeで以下のような「WhileTest6.java」を作成して下さい。


新規作成 【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( "ループから抜けました。" ); 
	} 
}



実行結果を確認して下さい。

~/Desktop/Programming/JP $ javac WhileTest6.java

~/Desktop/Programming/JP $ java WhileTest6
     
ループの中に入ります。
ループの中です:0
ループの中です:1
ループの中です:2
ループの中です:3
ループの中です:4
ループの中です:5
ループの中です:6
ループの中です:7
ループの中です:8
ループの中です:9
ループから抜けました。



06 | if】 << 【ホーム】 >> 【08 | for




↓↓クリックして頂けると励みになります。