C# 如何制作;至于;停下来?
这是我的代码:C# 如何制作;至于;停下来?,c#,winforms,C#,Winforms,这是我的代码: switch(gift1) { case 1: for (int ik = 0; allbuild[ik] == g[1]; ik++) { if (allbuild[ik] == 0) allbuild[ik] = g[1]; } break; case 2: for (int ik = 0; allbuild[ik] == g[2]; ik++)
switch(gift1)
{
case 1:
for (int ik = 0; allbuild[ik] == g[1]; ik++)
{
if (allbuild[ik] == 0)
allbuild[ik] = g[1];
}
break;
case 2:
for (int ik = 0; allbuild[ik] == g[2]; ik++)
{
if (allbuild[ik] == 0)
allbuild[ik] = g[2];
}
break;
}
allbuild[1] = g[1];
allbuild[2] = g[2];
allbuild[3] = g[3];
我想要这个:
allbuild[1] = g[1];
allbuild[2] = g[2];
allbuild[3] = g[3];
如果allbuild[ik]==0
,则它从g[1]或g[2]
中获取值,并且“for”结束,但它的工作方式与我想要的不一样。allbuild获取所有项的值
allbuild[1] = g[1];
allbuild[2] = g[2];
allbuild[3] = g[3];
依此类推,要
albuild[100]
使用break
,它跳到循环最里面的的末尾
allbuild[1] = g[1];
allbuild[2] = g[2];
allbuild[3] = g[3];
例如:
allbuild[1] = g[1];
allbuild[2] = g[2];
allbuild[3] = g[3];
for (int ik = 0; allbuild[ik] == g[1]; ik++)
{
if (allbuild[ik] == 0)
{
... do what it is that you want to do ...
break;
}
}
您没有得到预期结果的原因是,在块的末尾,ik
会增加,因此退出条件会将allbuild[]
中的下一个值与g[1]
进行比较。
正确使用break应该是:
allbuild[1] = g[1];
allbuild[2] = g[2];
allbuild[3] = g[3];
switch(gift1)
{
case 1:
{
for (int ik = 0; allbuild[ik] == g[1]; ik++)
{
if (allbuild[ik] == 0)
{
allbuild[ik] = g[1];
break;
}
}
break;
}
case 2:
{
for (int ik = 0; allbuild[ik] == g[2]; ik++)
{
if (allbuild[ik] == 0)
{
allbuild[ik] = g[2];
break;
}
}
break;
}
}
实际上,看起来您正在查找以下代码:
allbuild[1] = g[1];
allbuild[2] = g[2];
allbuild[3] = g[3];
if (/*condition you need is unclear, according to your code it is: allbuild[0] != g[gift1]*/)
{
for (int ik = 0; ik < allbuild.Length; ik++)
{
if (allbuild[ik] == 0)
{
allbuild[ik] = g[gift1];
break;
}
}
}
如果(/*您需要的条件不清楚,根据您的代码,它是:allbuild[0]!=g[gift1]*/)
{
对于(int ik=0;ik
首先,我怀疑循环条件,即allbuild[ik]==g[2]
等是否有效;可能您想测试(可能)所有项目
allbuild[1] = g[1];
allbuild[2] = g[2];
allbuild[3] = g[3];
接下来,带有100个早午餐的复制粘贴开关看起来非常难看,让我们将其塞进循环中:
allbuild[1] = g[1];
allbuild[2] = g[2];
allbuild[3] = g[3];
//TODO: check loop condition
for (int ik = 0; allbuild[ik] == g[gift1]; ik++)
if (allbuild[ik] == 0) {
allbuild[ik] = g[gift1];
break; // <- break the "for loop"
}
//TODO:检查循环条件
对于(int ik=0;allbuild[ik]==g[gift1];ik++)
如果(所有构建[ik]==0){
allbuild[ik]=g[gift1];
break;//不清楚您在问什么。对于在初始部分指定的条件下运行的循环:
allbuild[1] = g[1];
allbuild[2] = g[2];
allbuild[3] = g[3];
"int ik = 0; allbuild[ik] == g[1]; ik++"
在哪里
allbuild[1] = g[1];
allbuild[2] = g[2];
allbuild[3] = g[3];
allbuild[ik] == g[1]
是它正在计算的条件。如果这不再成立,那么它将停止迭代。您可以做很多事情使此计算为false
allbuild[1] = g[1];
allbuild[2] = g[2];
allbuild[3] = g[3];
但是,您也可以使用许多其他机制来逃避for循环:
allbuild[1] = g[1];
allbuild[2] = g[2];
allbuild[3] = g[3];
- 使用
break
语句完全停止for循环,然后继续执行下一条语句
- 使用
continue
语句跳过循环当前迭代的其余部分
- 使用
return
语句退出当前方法
- 使用
goto
语句(高度不推荐)
- 抛出一个
异常
- 使用退出代码,例如环境退出(代码)
语句
我建议您仔细阅读for循环并逐行调试代码。这适用于所有语言。Break;
..…在循环体内部,for
循环的2个似乎完全相同,除了g
的索引。我将完全失去开关,并使用g[gift1]
@ArN01d您能否尽您所能解释一下您试图做什么,以及为什么在switch语句中有for循环..?这样我们可以理解您的逻辑思维..也不要粘贴部分代码..发布所有相关代码您的break;
在循环之外。这不会有任何好处。哟你需要将它包含在if
块中。@GlorinOakenfoot我不建议这样做。那么OP将处理掉的问题。请参阅我的编辑。解决方法不是删除现有的中断
…这是开关
结构的一部分,你只是在中缺少了一个中断,在任何情况下,C#都不会让你失败,除非是在空的情况下。删除他现有的break
会产生编译错误。
allbuild[1] = g[1];
allbuild[2] = g[2];
allbuild[3] = g[3];