我的代码如下:
public void Method()
{
if (flagIsUp)
{
if (x = 1)
code here;
if (y = 2)
code here;
if (z = 3)
code here;
}
if (buttonPressed)
{
code here;
}
}
我在if(y = 2)下放置什么,如果它为TRUE,它将跳到“if(flagIsUp)”块的其余部分(即它将跳过“if(z = 3)” “语句”,并继续使用该方法(即转到“if(buttonPressed)”?我试过break;,但这需要一个循环。使用return;只需结束Method(),跳过剩下的代码,不是我的意图。
答案 0 :(得分:1)
使用您所拥有的构造,您无法使用简单的关键字。您应该修改它以使用else
:
if (x = 1)
code here;
else if (y = 2)
code here;
else if (z = 3)
code here;
答案 1 :(得分:1)
首先,=分配,==测试是否相等。
那就是说,大部分时间,包括else
,都应该足够了:
if (y == 2)
code here;
else if (z == 3)
code here;
答案 2 :(得分:1)
public void Method()
{
if (flagIsUp)
{
if (x = 1)
{
code here;
}
else if (y = 2)
{
code here;
}
else if (z = 3)
{
code here;
}
}
if (buttonPressed)
{
code here;
}
}
答案 3 :(得分:0)
使用else
来适应此
if (y == 2) {
code1;
} else{
if (z == 3) {
code2;
}
code3;
}
原始代码与我的标记清晰
if (y = 2)
code1;
if (z = 3)
code2;
code3;
答案 4 :(得分:0)
听起来像你想要别人
if ( y == 2 ) { /* do stuff */ }
else if ( z == 3) { /* do other stuff */ }
答案 5 :(得分:0)
您可以在else
前面使用if
,但如果您这样做,我建议您使用额外的括号。
public void Method()
{
if (flagIsUp)
{
if (x == 1)
{
code here;
}
if (y == 2)
{
code here;
}
else if (z == 3)
{
code here;
}
}
if (buttonPressed)
{
code here;
}
}
答案 6 :(得分:0)
将代码移动到函数:
if (flagIsUp)
{
doStuff(x, y, z);
}
...
void doStuff(int x, int y, int z)
{
if (x == 1)
{
// do stuff
return;
}
if (y == 2)
{
// do stuff
return;
}
if (z == 3)
{
// do stuff
return;
}
}
答案 7 :(得分:0)
以下是关于它们如何在后端运行的一些答案和解释(因为从长远来看理解为什么会对你有所帮助)
提出的一个简单答案是在每个后续else
语句之前使用if
public void Method()
{
if (flagIsUp)
{
if (x == 1)
//code here;
else if (y == 2)
//code here;
else if (z == 3)
//code here;
}
if (buttonPressed)
{
//code here;
}
}
这最终像编译后的运行更像是
public void Method()
{
if (flagIsUp)
{
if (x == 1)
{
//code here;
// Excecution skips to 'x==1 fastforward'
}
else
{
if (y == 2) // intentional indentation
{
//code here;
// Excecution skips to 'y==1 fastforward'
}
else
{
if (z == 3) // intentional indentation
{
//code here;
}
} // y==2 fast forward
} // x==1 fast forward
}
if (buttonPressed)
{
code here;
}
}
这种安排显示if条件中if if if“indents”子程序。如果A为真,那么它将跳过B和C的代码。如果A为假,且B为真,则跳过C.如果A和B为假,则检查C.
实现此目的的另一种方法是将此检查放入其自己的私有方法中,并在满足真实条件时从中返回
public void Method()
{
if (flagIsUp)
DoFlagUpCheck();
if (buttonPressed)
{
//code here;
}
}
private void DoFlagUpCheck()
{
if (x == 1)
{
//code here;
return; // Stop and return to Method()
}
if (y == 2)
{
//code here;
return; // Stop and return to Method()
}
if (z == 3)
{
//code here;
return; // Stop and return to Method()
}
}
这样,代码执行会在第一个真实条件下停止并从方法返回。如果A为真,请执行代码并返回,否则继续执行B ...
值得考虑的一件事是,程序是否可以重构,以便X,Y和Z可以在单个枚举中表示?由于x==1
,y==2
和z==3
是互斥的,因此可能有一种方法可以使这组条件更具可读性并最终得到更像
public Method()
{
if (flagIsUp)
{
switch(flagCondition)
{
case FlagX:
//code here;
break;
case FlagY:
//code here;
break;
case FlagZ:
//Code here;
break;
}
}
if (buttonPressed)
{
//code here;
}
}
最后,对于表现来说,首先放置最可能的真实条件往往是有帮助的。
答案 8 :(得分:-1)
你可以使用goto语句,即使它不利于代码可读性,也可以做你想做的事情......
public void Method()
{
if (flagIsUp)
{
if (x = 1)
code here;
if (y = 2){
code here;
goto Outer;
}
if (z = 3)
code here;
}
Outer:
if (buttonPressed)
{
code here;
}
}