Javaで「無限ループ」!その原因と止め方とは?【37回】

「Java入門」講座にご興味ある方はこちら。次回は7/26(水)27(木)開催です。

「Java応用(Spring MVC)」講座にご興味ある方はこちら。次回は8/2(水)3(木)開催です。

Javaで「無限ループ」!その原因と止め方とは?
ビジネスパーソンのためのプログラミング講座【第37回】

 

Javaで作成したプログラムを実行したら、予想に反していくら待っても終了しない、ということがあります。
そんな時は、プログラム内で「無限ループ」が起きている可能性があります。

■Java無限ループとは?
W「無限ループ」の原因は、プログラム内の繰り返し処理にバグがあることです。
繰り返し処理内の条件式が、予想に反して繰り返しを終了する条件を満たすことができず、処理を無限に繰り返しているのです。
そのため、いつまでもプログラムが終了しません。

■どのような時に無限ループが起こるのか?
Javaの繰り返し文には、for文、while文、do~while文があります。
プログラム内にこれらの構文がある場合は、その中で「無限ループ」が起きている可能性を疑った方がいいです。
for文の基本文法のように、ある変数を1ずつ増やしていって繰り返し回数を決めている場合は、それほど間違える可能性はありません。
しかし、以下のような時には注意が必要です。
「0になるまで」「500を超えるまで」のように終了条件に使う変数に複雑な計算処理を行っているケース。
条件を範囲指定している場合、なんらかの理由で終了条件に使う変数を「1ずつ増やす」ではなく「2ずつ増やす」「1ずつ減らす」などを行っているケース。
これらの場合、終了条件を間違えて、「無限ループ」が発生する可能性が高くなります。

■無限ループのデメリット
Javaにおける無限ループのデメリットとしては、繰り返し処理内で計算が無限に続くため、メモリを消費して食い潰してしまうことがあります。
本来想定される処理では、メモリをほとんど使わなくても、それが延々と繰り返されると「ちりも積もれば山となる」で、メモリを使い切ってしまいます。

■無限ループを止めるためには、プログラムを修正すること
まず、目の前で発生している無限ループを止めなければいけません。
「ctrl」+「c」を押せば、プログラムが強制終了されて、無限ループが止まります。
途中で強制終了しても、PCが壊れるなどの悪影響はありません。
続いて、プログラムの修正を行います。
まずは、繰り返し処理の条件式が正しいかチェックをします。
もっともシンプルなところでは、「不等式を間違えている」「変数を間違えている(iとjなど)」が考えられます。
条件式が正しい場合は、繰り返し処理内で行われている計算処理が正しいか検証しましょう。
他に考えられるのは、計算の入力値の範囲の想定が誤っているケースがあります。整数を想定していたのに、負の値や少数を含む値が許されているようなパターンです。

■繰り返し文は終了条件を確認
たいていのバグはコンパイル時に発見できてしまうのがJavaの長所ですが、「無限ループ」は発見できないので要注意です。
繰り返し文を使う時は、終了条件が正しいか注意する必要があります。
しかし、発生する場所は限られるので慣れればデバッグもそれほど難しくありません。

☆おすすめ講座☆
Java講座の詳細はこちら

  >プログラミング豆知識 記事一覧へ

投稿日: 2017年5月17日
カテゴリー: ブログ|導入事例

前後の記事

気になることは何でもお気軽にお問合せください。

0120-188-024 受付時間 平日9:00~19:00