JavaA2Z

KAB-studio > プログラミング > JavaA2Z > switchとは

switch

日本語 切り替え
英語 switch
ふりがな すいっち
フリガナ スイッチ

解説

整数値で複数の条件分岐うための予約語
switchステートメントで使用する。
 
「switch( 整数変数 ){ case 定数: 処理 }」という形式で、「整数変数」に格納された値と同じ「定数値」の直後の「処理」が実される。
通常は「switch( 整数変数 ){ case 定数値1: 処理1 case 定数値2: 処理2 case 定数値3: 処理3 default: デフォルト処理 }」のように複数のcaseと「定数値」を用意することで、「整数変数」に格納された値によって処理1~3のうちのどれかを処理させる。
この機能によって処理を分岐する。
 
ただし、caseは「ブロック」を対象としておらず、switchはただ単に「caseに飛ぶだけ」の機能しかない。
そのため「処理1」の後にそのまま「処理2」を実してしまうため、通常は「処理1」の最後にbreakを記述してswitchから抜けるようにする。
switchブロック内にはbreakステートメントを記述することができ、forwhileと同じく、switchのブロック直後に処理を移す、つまり「switchのブロックから抜ける」ことができる。
 
switchの「整数変数」の値がいずれの「定数値」とも該当しない場合には、default後の「デフォルト処理」が実される。
 
switchは、if分岐に比べて「定数値」と比較されるためほんの少し高速である。
しかし、他のステートメントと文法が大きく異なること、整数変数しか使用できないといったデメリットが多いため、あまり使用されない。

参考サイト

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

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

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

// Sample.java
public class Sample
{
    public static void main( String[] args )
    {
        // 一般的なswitchステートメントは以下のようになります。
        int i = 1;
        //      ↓このiの中身をチェックします。
        switch( i )
        {
        case 0:    // 「case」の後の値と「i」が一致した箇所に移ります。
            System.out.println( "ぜろ" );
            break;
        case 1:    // ですので、この例ではここに移ります。
            System.out.println( "いち" );
            // いち
            break;    // breakでswitchの外に出ます。
        case 2:
            // 直前で、breakで抜けているのでここには来ません。
            System.out.println( "に" );
            break;
        default:
            System.out.println( "でふぉると" );
            break;
        }
        // breakでここに抜けます。

        // breakがないとそのまま次の行へと移ります。
        switch( 1 )
        {
        case 0:
            System.out.println( "ぜろ" );
            break;
        case 1:    // ここへ飛びます。
            System.out.println( "いち" );
            // break; // たとえばこれをコメントアウトすると、
        case 2:
            // ここまで通過します。
            System.out.println( "に" );
            break;
        default:
            System.out.println( "でふぉると" );
            break;
        }
        // いち
        // に

        // ラベルを用いたbreakを使用することができます。
        label_out:
        {
            // 100回ループ。
            forint iF1 = 0; iF1 < 100; ++iF1 )
            {
                switch( 1 )
                {
                case 0:
                    System.out.println( "ぜろ" );
                    break;
                case 1:    // ここへ飛びます。
                    System.out.println( "いち" );
                    break label_out; // label_outラベルを指定します。
                case 2:
                    // ここまで通過します。
                    System.out.println( "に" );
                    break;
                default:
                    System.out.println( "でふぉると" );
                    break;
                }
            }
        }
        System.out.println( "label_outラベルのブロックの直後。" );
        // いち
        // label_outラベルのブロックの直後。

        // 一致する値がないとdefaultへと移ります。
        switch( 100 )
        {
        case 0:
            System.out.println( "ぜろ" );
            break;
        case 1:
            System.out.println( "いち" );
            break;
        case 2:
            System.out.println( "に" );
            break;
        default:
            System.out.println( "でふぉると" );
            break;
        }
        // でふぉると

        // このように、ラベル用いてブロックを指定して
        // breakすることもできます。

        // 最も単純なswitchステートメント。
        switch( 0 ){}
        // これだけでも一応switchステートメントになります。

        // 評価式(上記の「0」の箇所)には、
        // byte、short、int、charの整数値型しか使用できません。
        // switch( "あいうえお" ){}
        // コンパイルエラー:
        // case 定数は String でなく char、byte、short、または int でなければなりません。

        // 実はlong型も使用できません。
        // switch( 0L ){}
        // コンパイルエラー:
        // case 定数は long でなく char、byte、short、または int でなければなりません。

        // boolean型も使用できません。
        // switch( true ){}
        // コンパイルエラー:
        // case 定数は boolean でなく char、byte、short、または int でなければなりません。

        // ブロックを他のステートメントに置き換えることは
        // できません。
        // switch( 0 ) int i = 0;
        // コンパイルエラー:
        // キーワード "int" に構文エラーがあります。正しくは "{" です。
    }
}
// Sample.java
public class Sample
{
    public static void main( String[] args )
    {
        // 一般的なswitchステートメントは以下のようになります。
        int i = 1;
        //      ↓このiの中身をチェックします。
        switch( i )
        {
        case 0:    // 「case」の後の値と「i」が一致した箇所に移ります。
            System.out.println( "ぜろ" );
            break;
        case 1:    // ですので、この例ではここに移ります。
            System.out.println( "いち" );
            // いち
            break;    // breakでswitchの外に出ます。
        case 2:
            // 直前で、breakで抜けているのでここには来ません。
            System.out.println( "に" );
            break;
        default:
            System.out.println( "でふぉると" );
            break;
        }
        // breakでここに抜けます。

        // breakがないとそのまま次の行へと移ります。
        switch( 1 )
        {
        case 0:
            System.out.println( "ぜろ" );
            break;
        case 1:    // ここへ飛びます。
            System.out.println( "いち" );
            // break; // たとえばこれをコメントアウトすると、
        case 2:
            // ここまで通過します。
            System.out.println( "に" );
            break;
        default:
            System.out.println( "でふぉると" );
            break;
        }
        // いち
        // に

        // ラベルを用いたbreakを使用することができます。
        label_out:
        {
            // 100回ループ。
            for( int iF1 = 0; iF1 < 100; ++iF1 )
            {
                switch( 1 )
                {
                case 0:
                    System.out.println( "ぜろ" );
                    break;
                case 1:    // ここへ飛びます。
                    System.out.println( "いち" );
                    break label_out; // label_outラベルを指定します。
                case 2:
                    // ここまで通過します。
                    System.out.println( "に" );
                    break;
                default:
                    System.out.println( "でふぉると" );
                    break;
                }
            }
        }
        System.out.println( "label_outラベルのブロックの直後。" );
        // いち
        // label_outラベルのブロックの直後。

        // 一致する値がないとdefaultへと移ります。
        switch( 100 )
        {
        case 0:
            System.out.println( "ぜろ" );
            break;
        case 1:
            System.out.println( "いち" );
            break;
        case 2:
            System.out.println( "に" );
            break;
        default:
            System.out.println( "でふぉると" );
            break;
        }
        // でふぉると

        // このように、ラベル用いてブロックを指定して
        // breakすることもできます。

        // 最も単純なswitchステートメント。
        switch( 0 ){}
        // これだけでも一応switchステートメントになります。

        // 評価式(上記の「0」の箇所)には、
        // byte、short、int、charの整数値型しか使用できません。
        // switch( "あいうえお" ){}
        // コンパイルエラー:
        // case 定数は String でなく char、byte、short、または int でなければなりません。

        // 実はlong型も使用できません。
        // switch( 0L ){}
        // コンパイルエラー:
        // case 定数は long でなく char、byte、short、または int でなければなりません。

        // boolean型も使用できません。
        // switch( true ){}
        // コンパイルエラー:
        // case 定数は boolean でなく char、byte、short、または int でなければなりません。

        // ブロックを他のステートメントに置き換えることは
        // できません。
        // switch( 0 ) int i = 0;
        // コンパイルエラー:
        // キーワード "int" に構文エラーがあります。正しくは "{" です。
    }
}

この単語を含むページ

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

「サンプルプログラムとか」に含まれているページ

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