LoginSignup
0
1

More than 5 years have passed since last update.

JAVA無限ループのつまづきやすい所

Last updated at Posted at 2015-10-06

▪️問題  AとBが交互に出る無限ループを作ってください。

public class test1{
    public static void main(String[] args) {
        test2();
    }

    public static void test2() {
        for(int d = 0; ; d++) {
            if(d % 2 == 0) {
            System.out.println("A");
            }
            System.out.println("B");
            }
        }
    }   
}

▪️実行結果
A
B
B
A
B
B

▪️解説
ループブロック内で
・System.out.println("B"); は常に実行
だが、
・System.out.println("A"); は条件付き実行
だから。

その条件が if(d % 2 == 0
% は剰余演算子。
この場合「整数2で割った余り」になる。
d は 0, 1, 2, 3, 4, ... なので、その2の剰余を
考えてみればいい。
d%2 == 0 は「偶数だったら」に等しい。

dが偶数だったら
System.out.println("A");
System.out.println("B");
両方が実行されるが、基数だったら
System.out.println("B");
しか実行されない。

それを延々繰り返すから
A
B

B
の繰り返しになる。

▪️解説2
以下の様に1ステップずつ机上デバッグを行えばわかるはずです。

1.初期状態d = 0でループ開始。
2.if文の判定。d = 0よりd % 2 == 0が成立 → "A"を出力。
3.if文を抜ける。
4."B"を出力。
5.d++により、d = 1になる。
6.if文の判定。d = 1よりd % 2 == 0は不成立。
7.if文を抜ける。
8."B"を出力。
9.d++により、d = 2になる。
10.if文の判定。d = 2よりd % 2 == 0が成立 → "A"を出力。
11.if文を抜ける。
12."B"を出力。
13.d++により、d = 3になる。
14.if文の判定。d = 3よりd % 2 == 0は不成立。
15.if文を抜ける。
16."B"を出力。
17.d++により、d = 4になる。
18.if文の判定。d = 4よりd % 2 == 0が成立 → "A"を出力。
19.if文を抜ける。
20."B"を出力。


あとはこれの繰り返しです。

この実装を日本語で書くなら、
・dが偶数の時、"A"を出力する。
・dの値に関係なく、"B"を出力する。
となっています。
dが偶数の時は"A"と"B"が出力され、dが奇数の時は"B"のみが出力されるので、
A
B
B
A
B
B

となるのです。

AとBを交互に出力するなら、
・dが偶数の時、"A"を出力する。
・dが奇数の時、"B"を出力する。
という実装にする必要があります。

0
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1