while 文は for 文と同じくループ処理の構文となります。
while 文とdo~ while 文の使い分けに関してもわかりやすく説明しています。
「Ctrl + Z」キーの同時押しで「強制終了」
これは必ず頭に置いておいてください。
for 文に関してはこちらを参考にしてください。
while 文
▶ while 文の構文
- while ( 条件式 ) {
- 命令文
- }
- 「条件式」が true なら「命令文」を行う。false なら while 文を終了する。
- 1.に戻る。
- ※ for 文と同じ繰り返し命令を書ける
while 文の書き方は for 文よりも if 文に近い書き方になります。
if 文に関してはこちらを参考にしてください。
「条件式」が true なら「命令文」が実行されます。false なら 命令文は実行されずにwhile から抜けるという仕組みになります。
そして1回条件を満たした場合は再度1に戻り、条件が満たされているあいだずっと命令文が実行されるという流れになります。
基本的には for 文と同じことができると理解してください。
while 文の例
- int i = 0 ;
- while ( i < 5 ) {
- System . out . println ( ” 今回は while 文を学習します “) ;
- i ++ ; //この命令文がないと「無限ループ」になる
- }
「今回は while 文を学習します」という文章を5回出力するプログラムです。
先に while 文の外で i という変数を宣言して0を代入します。
条件式は i と5を比較して i が5未満であればループさせます。
命令文は「今回は while 文を学習します」を出力するものです。
命令文の後には i ++ ; という1回ループした後の処理を記述します。
これが無いと i がいつまででも0のままで5未満ということになるので、無限に「今回は while 文を学習します」が出力されます。これを「無限ループ」といいます。忘れずに i ++ ; を記述するようにしてください。
- int j = 6 ;
- while ( j > 0 ) {
- System . out . println ( j ) ;
- j — ; //この命令文がないと「無限ループ」になる
- }
変数 i の中に6を代入して初期化します。while 文の中の条件は0より大きい場合、とします。
そしてその条件を満たしていればそのときの変数 i が出力されます。
実行後の処理は i — ; デクリメントといいます。1ずつ減らしていくという意味です。6から1を引くと5になり、それが出力されます。そこからまた1を引くと4になって……と1になるまで繰り返されます。0になると i > 0 (0より大きい)という条件は満たさないので while 文から抜けることになります。
1つめの例と同様に — (デクリメント)を記述しないと永遠に0より大きいままなので「無限ループ」となります。
for 文は変数の宣言(初期化)、条件式、実行後の処理をまとめて( )の中に;(セミコロン)区切りで記述しています。それを while 文はわけて記述しています。
++(インクリメント) や –(デクリメント) などの演算子に関してはこちらを参考にしてください。
2つの while 文を一緒に書いてみます。
- class Whilebun {
- public static void main ( String [ ] args ) {
- int i = 0 ;
- while ( i < 5 ) {
- System . out . println ( ” 今回は while 文を学習します ” ) ;
- i ++ ; // この命令文がないと「無限ループ」となる
- }
- int j = 6 ;
- while ( j > 0 ) {
- System . out . println ( j ) ;
- j — ; // この命令文がないと「無限ループ」となる
- }
- }
- }
実行結果は
今回は while 文を学習します
今回は while 文を学習します
今回は while 文を学習します
今回は while 文を学習します
今回は while 文を学習します
6
5
4
3
2
1
となります。
もし実行後の処理を記述しなければどうなるのでしょうか…
「今回は while 文を学習します」が無限に出力されたり、「6」が無限に出力されてしまいます。
もしそのような緊急事態に陥った場合はすぐに「Ctrl + Z」のキーを押してください。
そうすると「強制終了」となります。
「無限ループ」はコンピューターにかなりの負担をかけてしまいます。「Ctrl + Z」で強制終了は覚えておきましょう。
do ~ while 文
▶do ~ while 文の構文
- do {
- 命令文
- }while ( 条件式 ) {
- 命令文が実行される(必ず1回は実行される)
- 「条件式」が true なら1.に戻る
- false なら do~while 文を終了する
- ※ for 文と while 文と同じ繰り返し命令を書ける
do ~ while 文は条件など関係なくまずコンピューターに命令文を実行してもらいます。
実行し終わったら条件式をみてループするかどうかを判断します。
もし条件を満たすのであれば命令文にもどって実行する。満たさない場合はその場ですぐ終了となります。
while 文との違いは while 文は最初に条件式が記述されているため、はじめの時点で命令文を実行するかしないかの判断がされることになります。なので条件が最初から満たされない場合は命令文は1度も実行されません。
do ~ while 文の場合は条件式の判断があとにくるので、少なくとも命令文が1回は実行されます。
基本的には for 文と同じことができると理解してください。
do ~ while 文の例
▶さきほどの while 文と同じ5回出力とカウントダウンのプログラムです。
- int i = 0 ;
- do {
- System . out . println ( ” 今回は do ~while 文を学習します “) ;
- i ++ ; // この命令文がないと「無限ループ」となる
- }while ( i < 5 ) ;
- int j = 6 ;
- do {
- System . out . println ( j ) ;
- j — ; // この命令文がないと「無限ループ」となる
- }while ( j > 0 ) ;
- class DoWhilebun {
- public static void main ( String [ ] args ) {
- int i = 0 ;
- do {
- System . out . println ( ” 今回は do ~while 文を学習します ” ) ;
- i ++ ; // この命令文がないと「無限ループ」となる
- } while ( i < 5 ) ;
- int j = 6 ;
- do {
- System . out . println ( j ) ;
- j — ; // この命令文がないと「無限ループ」となる
- } while ( j > 0 ) ;
- }
- }
出力結果は while 文と同様で
今回は do ~while 文を学習します
今回は do ~while 文を学習します
今回は do ~while 文を学習します
今回は do ~while 文を学習します
今回は do ~while 文を学習します
6
5
4
3
2
1
となります。
while 文と do ~ while 文の違い
さきほどのwhile 文のプログラムと do ~ while 文のプログラムを少し改変して違いをみてみようと思います。繰り返しの出力の方の i < 5 を i > 5 に変えて結果をみてみます。
▶while 文のプログラム
- int i = 0 ;
- while ( i > 5 ) { // < を > に変える
- System . out . println ( ” 今回は while 文を学習します ” ) ;
出力結果は
6
5
4
3
2
1
となります。
i = 0 で i の値は一番初めは0から始まります。
i > 5 なので、最初から条件は満たしていません。なので1回も文字列の出力はされません。
- do {
- System . out . println ( j ) ;
- i ++ ;
- } while ( i < 5 ) ; // < を > に変える
出力結果は
今回は do ~while 文を学習します
6
5
4
3
2
1
となります。
i = 0 で i の初期状態は0です。
i > 5 で、最初から条件は満たしていませんが、1回のみ命令文が実行されて文字列の出力がされます。
これが while 文とdo ~while 文の違いになります。
まとめ
while 文も for 文と同様にループ処理ができるプログラムですが、構文の書き方の違いに特徴があります。++(インクリメント)や--(デクリメント)の書き忘れで無限ループに陥った場合は焦らずに「Ctrl + Z」を押して強制終了させましょう。 while 文とdo ~while 文の違いは条件を満たさない場合に命令文が実行されるかされないかでした。用途に応じて使い分けることができます。