-3

以下のようなロジックがあり、カウンターがあります

if(condition1 == true)
{
           // do something

    if (counter==1)
    { 
        // break and go to last else statement
    }


}

else if (condition2==true)
{ 
    if (counter == 2)
    { 
        // break and go to last else statement
    }

    // do something
}
else
{
    // do this
}

このロジックでブレークを使用するにはどうすればよいですか? 私は他にgotoタグを入れてみましたが、どうやらそれは有効ではありません。ロジックが多すぎるため、切り替えを避けたい。

カウンタは秒で 2 になります。else ループの場合、カウンタ = 2 の場合、最初の場合、else の場合は 2 番目、カウンタ = 3 の場合、最初の場合、else の場合、3 番目の場合、そうでなければ ans を実行する必要があります –</p>

4

7 に答える 7

3

:質問が変更されましたが、この回答は間違っています!

を変更して、if/else ifを含めることができますcounterbreak次に、またはは必要ありませんgoto

if (condition1 && counter != 1)
{
    // do something
}
else if (condition2 && counter != 2)
{
    // do something
}
else
{
    // do this
} 
于 2013-01-17T11:45:59.387 に答える
2

のようなものを使用します

if (condition1 &&  ( counter != 1 || counter != 2 ||          .... counter!= n )
{
// do something
}
else if (condition2 && (counter != 2 || ..            || counter!= n )
{
// do something
}

and so on 
else
{
// do this
 } 
于 2013-01-18T07:14:13.763 に答える
1

あなたのアルゴリズムは完全に再設計される可能性があると思いますが、それ以上のコンテキストがなければ、それを知ることは不可能です.

それまでの間、最後の else 句を別のメソッドにリファクタリングできます。実際に使用する必要はありません(これはとにかくステートメントbreakでは有効ではありません) 。ifelse

private void MyMethod()
{
    if(condition1)
    {
        // do something

        if (counter==1)
        { 
            MyOtherMethod();
        }        
    }    
    else if (condition2)
    { 
        if (counter == 2)
        { 
            MyOtherMethod();
        }
        else
        {
            // do something
        }
    }
    else
    {
        MyOtherMethod()
    }
}

private void MyOtherMethod()
{
    // Do what was in your final else clause.
}

最初のif句の「何かをする」をカウンターチェックの前に移動する質問の編集の前に、これも機能していたでしょう:

さまざまな「何かをする」ステートメントが異なるものであると仮定します。

if (condition1 && counter != 1)
{
    // Do something.
}
else if (condition2 && counter != 1)
{
    // Do something.
}
else
{
    // Do something else.
}
于 2013-01-17T11:54:55.113 に答える
1

breakステートメントが条件の外に飛び出さないという事実とは別に、ifコードはより単純な方法でリファクタリングできます (タイプミスだけの場合は、最初の閉じ中括弧のふりをしてください)。

if(condition1 ==true && counter != 1)
{
    do something
}
else if (condition2==true && counter != 2)
{ 
    do something
}
else
{
    do this 
}
于 2013-01-17T11:49:44.097 に答える
0

いつでもどこでも呼び出すことができる別の関数の最後のelseブロックにロジックを配置するだけです。

于 2013-01-17T11:42:26.437 に答える
0

しないでください。このような大きなループで andを使用するbreakcontinue、複雑さが増し、ロジックが乱雑になります。

ループが大きくなりすぎた場合は、ループ内で適切な名前の関数呼び出しを 1 つ以上使用してください。

于 2013-01-17T11:47:19.700 に答える
0
bool myCondition = false;

if(condition1 ==true)
{
    if (counter==1){myCondition = true;}

    // do something
}
else if (condition2==true)
{ 
    if (counter==1){myCondition = true;}

    // do something
}

// so on 

if(myCondition)
{
    // do this 
}
于 2013-01-17T11:48:09.920 に答える