我想循环除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;
}
答案 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修改你的解决方案会更好。