如何为C#同时检查所有变量的循环?

时间:2013-08-12 07:38:56

标签: c#

我想循环除blueBallPosition [0]和greenBallPosition [0]之外的所有blueBallPosition [i]和greenBallPosition [i]。而且,如果除了[0]之外的所有变量都是>我想做一个if else语句。 360.然而,[0]是< 360.我试过做一个循环。但是,如果blueBallPosition [1]> 360和greenBallPosition [1]> 360,暂停将被设置为真。我想遍历所有变量以确保它们是> 360,然后暂停设置为true。

for (int i = 1; i < levelBall; i++)
{
    if ((blueBallPosition[0]  < 360) && 
        (greenBallPosition[0] < 360) && 
        (blueBallPosition[i]  > 360) && 
        (greenBallPosition[i] > 360))
            {
                pause = true;
            }
}

为了您的信息,levelBall设置为4。

我已经解决了。我只需要添加一个计数器。

for (int i = 1; i < levelBall; i++)
        {
            if ((blueBallPosition[0] < 360) && (greenBallPosition[0] < 360) && (blueBallPosition[i] > 360) && (greenBallPosition[i] > 360))
            {
                count++;
            }
        }

        if (count == (levelBall))
        {
            pause = true;
        }
        else
        {
            count = 0;
        }

8 个答案:

答案 0 :(得分:2)

所以你只想暂停所有球(除了0)是> 360?

bool pause = false;

// Check ball[0] outside the loop for performance.
if (blueBallPosition[0] < 360 && greenBallPosition[0] < 360)
{
    pause = true;
    for (int i = 1; i < levelBall; i++)
    {
        if (blueBallPosition[i]  <= 360) || (greenBallPosition[i] <= 360))
        {
            pause = false;
            // You have found a ball that doesn't match, so no need
            // to keep checking.
            break;
        }
    }
}

答案 1 :(得分:1)

由于您要检查所有变量是否满足该条件,如果满足它们,则无法将其设置为true,您可以将其重写为true,检查其中一个是否满足它然后设置它改为假。如果之后仍然如此,那么你就知道所有变量都满足条件。

pause = true;
for(...) 
    if(blue[0] >= 360) || green[0] >= 360 || blue[i] <= 360 || green[i] <= 360)
         pause = false;

答案 2 :(得分:1)

试试这个:

if (blueBallPosition[0] < 360 &&
    greenBallPosition[0] < 360 &&
    blueBallPosition.Skip(1).All(b => b > 360) &&
    greenBallPosition.Skip(1).All(b => b > 360))
    pause = true;

答案 3 :(得分:1)

您可以尝试使用linq使其更具可读性:

        if (blueBallPosition[0] < 360 && greenBallPosition[0] < 360)
        {
            var paulse = blueBallPosition.Select((b, idx) =>
                new { Blue = b, Green = greenBallPosition[idx] })
             .Skip(1).All(x => x.Blue > 360 && x.Green > 360);
        }

答案 4 :(得分:0)

pause = true;

for (int i = 1; i < levelBall; i++)
{
    if ((blueBallPosition[0]  >= 360) || 
        (greenBallPosition[0] >= 360) || 
        (blueBallPosition[i]  <= 360) || 
        (greenBallPosition[i] <= 360))
            {
                pause = false;
                break;
            }
}

答案 5 :(得分:0)

首先,移动可以在循环之外的检查。然后假设所有检查都通过,然后撤消该假设,如果结果是假的:

if ((blueBallPosition[0]  < 360) && 
    (greenBallPosition[0] < 360))
{
    pause = true;
    for (int i = 1; i < levelBall; i++)
    {
        if((blueBallPosition[i]  <= 360) || 
        (greenBallPosition[i] <= 360))
        { 
            pause = false;
        }
    }
}

答案 6 :(得分:0)

非常短的代码就像:

  var pause = false;
  if (blueBallPosition[0] < 360 && greenBallPosition[0] < 360)
  {
    pause = blueBallPosition.Any(b => b <= 360) || greenBallPosition.Any(b => b < 360);
  }


不要忘记在命名空间中使用。   使用System.Linq;

答案 7 :(得分:0)

亚历克斯和雷克斯你的代码上的坏事你使用ALL = all意味着循环所有元素如果用Any修改你的解决方案会更好。