JavaA2Z

KAB-studio > プログラミング > JavaA2Z > 無限ループとは

無限ループ

日本語 無限輪
英語 infinite loop
ふりがな むげんるーぷ
フリガナ ムゲンループ

解説

決して止まらないループのこと。
永久ループ」とも言う。
 
forwhiledo-while等の繰り返し系ステートメントや、再帰呼び出し等、同じ処理を繰り返しう「ループ」を止めるための条件が機能せず、処理を繰り返し続けることを「無限ループ」と言う。
無限ループとなった場合、強制終了する必要がある。ローカル変数インスタンスを作成している場合にはOutOfMemoryErrorクラスStackOverflowErrorクラス投げられることで終了する場合もある。
 
ループの終了条件に誤りがあったり、ループの回数を数える変数ループカウンター)の増え方に誤りがあったりする場合に発生することが多い。

参考サイト

  • (参考サイトはありません)

(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

// Sample.java
public class Sample
{
    public static void main( String[] args )
    {
        // 無限ループの例。
        while( true )
        {
            System.out.println( "ループ中" );
            // ループ中
            // ループ中
            // ループ中
            // ループ中
            // ...

            // と、ループが止まりません。
            // こうなったら強制終了する必要があります。
        }
    }

    // ありがちな無限ループの例。
    private static void example()
    {
        // 1.ループカウンターを増やし忘れる。
        int i = 0;
        while( i < 100 )
        {
            // ++i;    // を書き忘れたり。
        }

        // 2.条件式を間違える。
        forint iF1 = 0; 0 <= iF1 || iF1 < 5; ++iF1 )
        {
            // 「0以上か5未満」なので、これだと常に「0以上」に
            // 当てはまってしまうため無限ループになります。
        }

        // 3.ループカウンターを書き換える。
        forint iF1 = 0; iF1 < 5; ++iF1 )
        {
            iF1 = 0;
            // これだと毎回0にリセットされてしまいます。
        }

        // 4.知らずに再帰呼び出ししてしまう。
        methodA();
        // methodA()メソッドとmethodB()メソッドはお互いに
        // 呼び合っているので止まりません。

        // ただ、ここまで分かりやすいことは少ないでしょう。
        // 実際には「while( true ) の無限ループで、if(){ break; }で
        // 抜けるつもりが、ミスがあって抜けない場合がある」といった
        // 複雑で見つけにくいバグの方が多いと思いでしょう。
    }

    private static void methodA()
    {
        // methodB()を呼びます。
        methodB();
    }

    private static void methodB()
    {
        // methodA()を呼びます。
        methodA();
        // ……と、永久に止まりません。
    }
}
// Sample.java
public class Sample
{
    public static void main( String[] args )
    {
        // 無限ループの例。
        while( true )
        {
            System.out.println( "ループ中" );
            // ループ中
            // ループ中
            // ループ中
            // ループ中
            // ...

            // と、ループが止まりません。
            // こうなったら強制終了する必要があります。
        }
    }

    // ありがちな無限ループの例。
    private static void example()
    {
        // 1.ループカウンターを増やし忘れる。
        int i = 0;
        while( i < 100 )
        {
            // ++i;    // を書き忘れたり。
        }

        // 2.条件式を間違える。
        for( int iF1 = 0; 0 <= iF1 || iF1 < 5; ++iF1 )
        {
            // 「0以上か5未満」なので、これだと常に「0以上」に
            // 当てはまってしまうため無限ループになります。
        }

        // 3.ループカウンターを書き換える。
        for( int iF1 = 0; iF1 < 5; ++iF1 )
        {
            iF1 = 0;
            // これだと毎回0にリセットされてしまいます。
        }

        // 4.知らずに再帰呼び出ししてしまう。
        methodA();
        // methodA()メソッドとmethodB()メソッドはお互いに
        // 呼び合っているので止まりません。

        // ただ、ここまで分かりやすいことは少ないでしょう。
        // 実際には「while( true ) の無限ループで、if(){ break; }で
        // 抜けるつもりが、ミスがあって抜けない場合がある」といった
        // 複雑で見つけにくいバグの方が多いと思いでしょう。
    }

    private static void methodA()
    {
        // methodB()を呼びます。
        methodB();
    }

    private static void methodB()
    {
        // methodA()を呼びます。
        methodA();
        // ……と、永久に止まりません。
    }
}

この単語を含むページ

「みだし」に含まれているページ

「解説」に含まれているページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2005/12/10
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。