- masatoshi
- Mar 9, 2018
今更聞けないJava・繰り返し文の違い
繰り返し文をいろいろ紹介してみる
・繰り返しの記述方法
基本的な記述方法はこちら
for文
for ( int i = 0; i < [値]; i++ ) { 処理 }
値の数だけ繰り返します、10 と入力したら 10回繰り返します。
while文
while ( 比較 ) { 処理 }
カッコには比較演算子を入れます。
do while文
do { 処理 } while ( 比較 )
while文と同じでカッコ内には比較演算子を入れます。
・それぞれの違い
この3つはどれも同じように繰り返しの処理を行うことが出来ますが、それぞれ用途が違います。
for 文と while 文の違い
この2つはどちらを使用しても処理への影響に変化はありません。
ですが可読性の関係上、以下の様に使い分けられます。
// for 文では比較部分で具体的な繰り返しの数がわかる for (int i = 0; i < 10; i++) {} // while 文では何回繰り返すのかが分からない、a の要素の変化のしかたで変わる while ( a > 10 ) {} /* for 文はあらかじめ繰り返す数が決まっている物 while 文は繰り返す数が分からない物に使うのが基本 */
例えばあらかじめ数の決まってる物、トランプの枚数は53枚とすでに分かっているので for 文を使用します。
このトランプのセットを1日に作る個数は決まっていないのでwhile文を使うと言った感じですね。
// for文が 53 回繰り返したら終了するのに対して // while文は目的の条件になるまで不定期に繰り返す。 for (int i = 0; i < 53; i++) { 処理 } while ( 比較 ) { 処理 }
do while 文との違い
前者2つと do while 文とでは大きな違いがあります、まずはコードで比較してみます。
int whileNumber = 0; int doWhileNumber = 0; // while 文 while ( false ) { whileNumber++; } // do while 文 do { doWhileNumber++; } while ( false )
2つの数値をそれぞれ出力した結果
while 文 → 0 do while 文 → 1
どちらも1回目の比較から false になります、while 文では 最初に比較を行うため 処理は行われずにブロックを抜けます。
それに対して、do while 文は比較を行う前にブロックがあります。
そのため、結果が false でも最初の1回目は処理を行ってしまいます。
これらを上手に使い分けることによって可読性の向上に繋がりますね。
・ ネスト
繰り返し文だけではないですが、例えば for 文の中に for 文を入れることをネストと呼びます。
// for 文のネストの一例 for ( int i = 0; i < 10; i++ ) { // ここに処理を書いた場合はこの処理を行ってから下の for 文へ移行する for ( int j = 0; i < 10; j++ ) { // 2つの for 文が 両方 true 時の処理 } }
実行時の結果
i : 0 , j : 0 i : 0 , j : 1 i : 0 , j : 2 -----省略----- i : 0 , j : 9 // 内側の繰り返しが終わったらすぐ外側の for 文に移行する。 i : 1 , j : 0 i : 1 , j : 1
ネストをすることによってより複雑な処理を可能にします。
数値の変数は同じものを使用出来ないので、注意しましょう。
他の繰り返し文でも一応出来ます、でもあまり使う人はいないんで避けた方がいいでしょう。
・拡張 for ループ
for 文の発展系ですが、配列を扱う時はこちらの方が便利です。
int[] array = {1, 2, 3, 4, 5}; // 普通の for 文の場合 for ( int i = 0; i < array.length; i++ ) { 処理 } // 拡張 for ループの場合 配列の要素数分、繰り返す。 for ( int i : array ) { 処理 }
上と下は同じ処理ですが、拡張 for ループの場合は i の中に配列の要素が格納されます。
それぞれの i を5回出力した場合
// for文 0 1 2 3 4 // 拡張 for ループ 1 2 3 4 5
i の要素は繰り返しで更新されてしまうので保管して起きたい時は別の変数に代入してください。
・ラベル付き for ループ
for文には名前を付けることもできます。
// label という名前の for 文になる label:for( 省略 ) { 処理 }
名前を付けることによって、特定の for 文に移動することができます。
ネストした物にしか使用できないので注意してください。
// ネストしていないと動かない label:for ( 省略 ) { 処理 } for ( 省略 ) { continue label; } // 名前 label の for 文へ移動する label:for ( 省略 ) { for ( 省略 ) { continue label; } }
break と continue はプログラムの流れを無理やり変えたり、止めたりする命令です。
乱用すると可読性が下がるし、嫌がられるので注意しましょう。
以上、繰り返し文についてでした。
Comments
Add your comment