前回は配列から条件を満たす値を抽出する方法について説明しました。今回はfor文やwhile文で使用する「break」について説明します。
for文, while文を強制終了
for文、while文は繰り返し処理を行う際に使用する構文でした。for文ではあらかじめ決められた回数を実行する際に使用し、while文は条件を満たし続ける場合処理を繰り返すと説明しました。(詳細はfor文 | MATLAB基礎14、while文 | MATLAB基礎13を参照)for文やwhile文で意図してループ終了したいときに「break」を使用します。以下に例を示しています。
cnt = 0;
while 1
a = randi(100);
if a == 100
break;
end
cnt = cnt + 1;
end2行目で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の動作を確認します。
for i=1:100
if i>50
break
end
end
disp(i)
上の例ではi=51のときbreakが実行されforループが終了し、6行目が実行されます。i=51でループが終了したので、コマンドウインドウには51が表示されます。
2重ループでのbreakの動作
続いて、2重ループで試してみます。
for i=1:100
for j=1:100
if j>50
break
end
end
end
disp(i)
上の例では2重ループの中でj=51のときbreakが実行されました。ただし、上の階層のループは終了していないためi=100までfor i=1:100は実行されています。そのためコマンドウインドウに100が表示されiが100になるまでループが繰り返されたことがわかります。
continue 次のループまでスキップ
breakと一緒に覚えておきたい構文が「continue」です。breakはループ自体を終了させたのに対して、continueは次のループまでスキップするという処理になります。
下記例では、10で割って余りがある場合continueが実行されます。余りがない場合continueが実行されないためdisp(i)が実行されコマンドウインドウにiのあたいが表示されます。
for i=1:100
if mod(i,10)
continue
end
disp(i)
end
上の図のように10の倍数の値のみdispでコマンドウインドウに値が表示されるようになっています。
まとめ
今回はfor文, while文で使用するbreakとcontinueについて説明しました。ループの中で動きを変えることができる強力な方法ですので正しく用いれば複雑な処理も簡潔に記述できるようになります。ぜひ使い方を覚えてください。
次回は関数の作成について説明します。
本日作成したコードは下記に載せておきますので、適宜コピーしてご使用ください。
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
コメント