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];