break, continue | MATLAB基礎17

前回は配列から条件を満たす値を抽出する方法について説明しました。今回はfor文やwhile文で使用する「break」について説明します。

for文, while文を強制終了

for文、while文は繰り返し処理を行う際に使用する構文でした。for文ではあらかじめ決められた回数を実行する際に使用し、while文は条件を満たし続ける場合処理を繰り返すと説明しました。(詳細はfor文 | MATLAB基礎14while文 | MATLAB基礎13を参照)for文やwhile文で意図してループ終了したいときに「break」を使用します。以下に例を示しています。

MATLAB
cnt = 0;
while 1
    a = randi(100);
    if a == 100
        break;
    end
    cnt = cnt + 1;
end

2行目でwhile 1と記載しています。while文ではwhileの右隣の値が0でなければ処理が繰り返されるため、while 1と記載するとわざと無限ループを作っています。そしてa の値が100になったときだけ5行目のbreakが実行され、処理が終了します。breakが実行されると、後の処理は実行されずwhile文が終了します。そのため上のコードではaが100になるまでに何回ループしたかをcntの値を使って数えています。a==100となった場合cntは加算されません。

breakの用途

上の説明のようにループ処理を途中で止めて、残りの処理を実行させたくない場合にbreakは有効な手段です。

また、while 1のように繰り返し実行し続けていて、ある条件で処理を停止させたい場合などに用いることができます。

1重ループでのbreakの動作

まずは普通のfor文でbreakの動作を確認します。

MATLAB
for i=1:100
    if i>50
        break
    end
end
disp(i)
breakの動作

上の例ではi=51のときbreakが実行されforループが終了し、6行目が実行されます。i=51でループが終了したので、コマンドウインドウには51が表示されます。

2重ループでのbreakの動作

続いて、2重ループで試してみます。

MATLAB
for i=1:100
    for j=1:100
        if j>50
            break
        end
    end
end
disp(i)
breakの動作 2重ループ

上の例では2重ループの中でj=51のときbreakが実行されました。ただし、上の階層のループは終了していないためi=100までfor i=1:100は実行されています。そのためコマンドウインドウに100が表示されiが100になるまでループが繰り返されたことがわかります。

continue 次のループまでスキップ

breakと一緒に覚えておきたい構文が「continue」です。breakはループ自体を終了させたのに対して、continueは次のループまでスキップするという処理になります。

下記例では、10で割って余りがある場合continueが実行されます。余りがない場合continueが実行されないためdisp(i)が実行されコマンドウインドウにiのあたいが表示されます。

MATLAB
for i=1:100
    if mod(i,10)
        continue
    end
    disp(i)
end
continue 使用例

上の図のように10の倍数の値のみdispでコマンドウインドウに値が表示されるようになっています。

まとめ

今回はfor文, while文で使用するbreakとcontinueについて説明しました。ループの中で動きを変えることができる強力な方法ですので正しく用いれば複雑な処理も簡潔に記述できるようになります。ぜひ使い方を覚えてください。

次回は関数の作成について説明します。

本日作成したコードは下記に載せておきますので、適宜コピーしてご使用ください。

MATLAB
cnt = 1;
while 1
    a = randi(100);
    if a == 100
        break;
    end
    cnt = cnt + 1;
end

for i=1:100
    for j=1:100
        if j>50
            break
        end
    end
end
disp(i)

for i=1:100
    if mod(i,10)
        continue
    end
    disp(i)
end

関連記事

コメント

この記事へのコメントはありません。