0

Javaで一般的なswitchcaseステートメントを作成したいと思います。私はプログラムを作成していますが、ある時点で、次のようなswitchステートメントに対して32の異なるケースを作成する必要がありますcase 0 : , case 1 : , .... case 31 :。そして、すべての場合において、私は数行のコードを書かなければなりません。32個の個別のcaseを記述する必要がないように、一般的なswitch caseステートメントを実装する方法はありますか?

例えば:

switch(n){
case k :
.....
{

これをJavaで実装するにはどうすればよいですか?出来ますか?

4

4 に答える 4

5

defaultブランチを使用しない理由:

switch (n) {
  // cases for which you need custom behavior...
  default:
    // use n for the general case
}
于 2013-01-11T19:41:15.697 に答える
1

列挙型を使用できます。たとえば、数字の名前と整数値を照合する列挙型は次のとおりです。

enum MyDigit
{
    ZERO(0),
    ONE(1),
    TWO(2),
    // etc
    NINE(9);

    private final int intValue;

    MyDigit(int intValue)
    {
        this.intValue = intValue;
    }

    public int intValue()
    {
        return intValue;
    }
}

列挙型は非常に柔軟です。たとえば、すべての値の逆マップを作成し、静的ルックアップ メソッドを使用して列挙型の目的の値を取得することもできます。

values()(はい、 /を使用できるため、ここで整数値が冗長であると言う人もいますordinal()が、それは説明のためです)

于 2013-01-11T19:58:25.230 に答える
0

32 ケースの switch ステートメントと、頻繁に拡張する必要がある可能性のあるステートメントが表示される場合は、通常、コードまたは設計の「臭い」を示しています。このスイッチ構造をコードの複数の場所に複製する必要がある可能性があります。その結果、メンテナンス コストが高くなり、オープン/クローズの原則単一責任の原則に違反する脆弱なコードが作成されます (要件の単一の変更として)。複数の場所でチャンスコードを強制する場合があります)。

この問題の解決策は、コードを複数のクラスに分解してポリモーフィズムを利用することです。分解に取り組むときは、どのデザイン パターンが switch ステートメントの最も適切な置換を提供するかという観点から考える必要があります。いくつかの潜在的な候補 (コードの性質がわからないため) は、 CommandStrategyVisitorです。しかし、他にもあります。

于 2013-01-11T19:56:32.327 に答える
0

それぞれの場合で2行を書く必要があり、それらの変数はケースによって異なります...したがって、ケース0では、後で使用する変数は0 * Lです(lは値が必要な変数であり、最初にそのL = 8)...その場合、ケース 1 は 1*L ...ケース 2 : 2*L など

入力数値が 0 から 32 の間の数値であるかどうかを確認してから、n*L を実行します。

int result = 0;
if(n>=0&&n<32){
    result=n*L;
}else{
    System.err.println("wrong number");
    //or do whatever you have to
}
于 2013-01-12T00:12:29.487 に答える