我有一个像下面的逻辑,我有一个计数器
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
}
我如何在这个逻辑中使用break? 我试着把goto标签用于其他但显然它无效。我想避免切换,因为有太多的逻辑。
计数器将在第二个if if循环中为2,如果counter = 2则首先if和secong if else如果counter = 3则执行,然后如果第二个if if else则if else应该执行ans等等 -
答案 0 :(得分:3)
注意:问题已更改,此答案同时不正确!
您可以更改if/else if
以包含counter
。那么您不需要break
或goto
:
if (condition1 && counter != 1)
{
// do something
}
else if (condition2 && counter != 2)
{
// do something
}
else
{
// do this
}
答案 1 :(得分: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
}
答案 2 :(得分:1)
除了break
语句没有超出if
条件之外,您的代码可能是
以更简单的方式重构(只是假装在第一个之后的闭合支撑,如果它只是一个错字)
if(condition1 ==true && counter != 1)
{
do something
}
else if (condition2==true && counter != 2)
{
do something
}
else
{
do this
}
答案 3 :(得分:1)
我怀疑你的算法可以完全重新设计,但没有更多不可能知道的背景。
与此同时,您可以将最终的else子句重构为单独的方法。您实际上不需要使用break
(无论如何在if
语句中无效),明智地使用else
。
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子句中的`do something'移动到计数器检查之前,这也可以起作用:
假设你的各种“做某事”的陈述是不同的:
if (condition1 && counter != 1)
{
// Do something.
}
else if (condition2 && counter != 1)
{
// Do something.
}
else
{
// Do something else.
}
答案 4 :(得分:0)
只需将逻辑放在最后一个其他块中的单独函数中,您可以随时随地调用它。
答案 5 :(得分:0)
<强>不即可。在如此大的循环中使用break
和continue
会增加复杂性并使您的逻辑变得混乱。
如果循环变得太大,请在循环中使用一个或多个命名良好的函数调用。
答案 6 :(得分: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
}