0

我想循环除 blueBallPosition[0] 和 greenBallPosition[0] 之外的所有 blueBallPosition[i] 和 greenBallPosition[i]。而且,如果除 [0] 之外的所有变量都 > 360,我想做一个 if else 语句。而 [0] 是 < 360。我试图做一个循环。但是,如果 blueBallPosition[1] > 360 并且 greenBallPosition[1] > 360,则 pause 将已设置为 true。我想遍历所有变量以确保它们 > 360,然后将 pause 设置为 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;
        }
4

8 回答 8

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;
        }
    }
}
于 2013-08-12T07:47:21.990 回答
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);
        }
于 2013-08-12T07:56:22.497 回答
1

由于您要检查是否所有变量都满足该条件,如果一个满足它们,则不能将其设置为 true,您可以将其重写为开始为 true,检查其中一个变量是否不满足,然后将其设置为 false . 如果事后仍然正确,您知道所有变量都满足条件。

pause = true;
for(...) 
    if(blue[0] >= 360) || green[0] >= 360 || blue[i] <= 360 || green[i] <= 360)
         pause = false;
于 2013-08-12T07:46:01.057 回答
1

尝试这个:

if (blueBallPosition[0] < 360 &&
    greenBallPosition[0] < 360 &&
    blueBallPosition.Skip(1).All(b => b > 360) &&
    greenBallPosition.Skip(1).All(b => b > 360))
    pause = true;
于 2013-08-12T07:48:58.057 回答
0

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

于 2013-08-12T08:17:41.377 回答
0

非常短的代码,就像:

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


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

于 2013-08-12T08:12:34.303 回答
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;
            }
}
于 2013-08-12T07:44:53.650 回答
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;
        }
    }
}
于 2013-08-12T07:46:17.430 回答