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ステートメントを記述することができ、forやwhileと同じく、switchのブロック直後に処理を移す、つまり「switchのブロックから抜ける」ことができる。
switchの「整数型変数」の値がいずれの「定数値」とも該当しない場合には、default後の「デフォルト処理」が実行される。
switchは、ifの分岐に比べて「定数値」と比較されるためほんの少し高速である。
しかし、他のステートメントと文法が大きく異なること、整数型変数しか使用できないといったデメリットが多いため、あまり使用されない。
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ステートメントを記述することができ、forやwhileと同じく、switchのブロック直後に処理を移す、つまり「switchのブロックから抜ける」ことができる。
switchの「整数型変数」の値がいずれの「定数値」とも該当しない場合には、default後の「デフォルト処理」が実行される。
switchは、ifの分岐に比べて「定数値」と比較されるためほんの少し高速である。
しかし、他のステートメントと文法が大きく異なること、整数型変数しか使用できないといったデメリットが多いため、あまり使用されない。
参考サイト
- (参考サイトはありません)
// 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" に構文エラーがあります。正しくは "{" です。
}
}
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" に構文エラーがあります。正しくは "{" です。
}
}
// 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" に構文エラーがあります。正しくは "{" です。 } }