0

blueBallPosition[0] と greenBallPosition[0] を除くすべての blueBallPosition[i] と greenBallPosition[i] をループしたい。また、[0] 以外のすべての変数が > 360 の場合、if else ステートメントを実行したいのですが、[0] は < 360 です。ループを実行しようとしました。ただし、blueBallPosition[1] > 360 および greenBallPosition[1] > 360 の場合、pause はすでに true に設定されています。すべての変数をループして、それらが > 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;
        }
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

これを試して:

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 に答える
1

すべての変数がその条件を満たしているかどうかを確認したいので、1 つが満たされている場合に true に設定することはできません。最初は true として書き直して、そのうちの 1 つが満たされていないかどうかを確認してから、代わりに 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 に答える
0

アレックスとレックスはコードの悪い点 u を使用しています ALL = all は、ソリューションを Any で変更するとすべての要素をループすることを意味します。

于 2013-08-12T08:17:41.377 に答える
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

very short code just like:

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


Do not forget the using in namespace. using System.Linq;

于 2013-08-12T08:12:34.303 に答える