いつか、技術ブログを

新人SE(OJT中)が技術ブログを書きたがっているブログです

while、forの条件式が判定されるタイミングは?(Java)(超初心者)

応用情報の問題を解いてて、whileの条件式って最初に1回判定されるっけ?ってちょっと混乱したのでまとめました。
タイトルにJavaってつけてますがJavaに限った話ではないと思います(多分)。

while

while(条件式・・・①){
    //処理・・・②
}

while文では、
① 条件式が判定される
② 条件式がtrueだったら処理が実行される(falseなら処理は1度も行われない)
①' 再度条件式が判定される
②' 条件式がtrueだったら・・・
という流れで繰り返されます。

do-while

do{
    //処理・・・①
}while(条件式・・・②);

do-while文では、
① 処理が実行される
② 条件式が判定される
①' 条件式がtrueだったら処理が実行される(falseならされない)
②' 条件式が・・・
という流れで繰り返されます。
ポイントは、条件式に関わらず最低一回は処理が実行される、ということです。
あと、while文と違って最後に;(セミコロン)が必要なのも忘れがちですよね!(私はこの記事書いてて気づきました)

for

for(式1・・・①; 条件式・・・②; 式2・・・④){
    //処理・・・③
}

for文では、
① 式1でカウンタ変数の初期化を行う
② 条件式が判定される
③ 処理が行われる
④ 式2でカウンタ変数のインクリメントなどが行われる
という流れで繰り返されます。

クイズ

では、以下のコードの出力結果はどうなるでしょうか?

①while

public class WhileSample {
    public static void main(String[] args) {
        int i = 0;
        while(i<3) {
            System.out.println(i);
        }
    }
}

↑のコードの出力はどうなるでしょうか??

正解は・・・

0が無限に出力されるです!
すみません、whileって書き慣れてないのでiを増やすのを忘れてました(笑)

本当にやりたかった問題はこっちです!

public class WhileSample {
    public static void main(String[] args) {
        int i = 0;
        while(i<3) {
            System.out.println(i);
            i++;
        }
    }
}

さて、出力結果はどうなるでしょうか?

0
1
2

となります!

②do-while

public class DoWhileSample {
    public static void main(String[] args) {
        int i = 0;
        do {
            System.out.println(i);
            i++;
        }while(i<3);
    }
}

の出力はどうなるでしょうか?

結果は・・・

0
1
2

となります!
whileと一緒ですね。

せっかくなので、do-whileらしいのも書いてみます。

public class DoWhileSample2 {
    public static void main(String[] args) {
        int i = 100;
        do {
            System.out.println(i);
            i++;
        }while(i<3);
    }
}

これを実行すると・・・

100

という結果になります。do-while文なので、条件に合っていなくても1回は実行されていますね!

③for

public class ForSample {
    public static void main(String args[]) {
        for(i = 0; i<3; i++) {
            System.out.println(i);
        }
    }
}

これを実行するとどうなるでしょうか?

答えは・・・

コンパイルエラーになるです!
私がよくやる”変数の宣言を忘れる"というミスです(笑)
ちゃんと int i=0 というように直して

package javaSamples;

public class ForSample {
    public static void main(String args[]) {
        for(int i = 0; i<3; i++) {
            System.out.println(i);
        }
    }
}

実行すると、

0
1
2

と出力されます!

まとめ

  • while文、for文は最初に条件式の判定が行われる
  • do-while文は、処理を行ってから条件式の判定が行われる

あと、forはカウント変数を初期化するのを忘れがちなので気をつけたいです!

参考文献

オラクル認定資格教科書 Javaプログラマ Silver SE 8 スピードマスター問題集

オラクル認定資格教科書 Javaプログラマ Silver SE 8 スピードマスター問題集