在继续之前需要循环检查2个条件

时间:2013-05-01 19:06:51

标签: c# loops for-loop conditional-statements

我目前正在开发一个非常基础的“推箱子”游戏。我正在尝试为循环做这个,但似乎无法完成它。我的目标是执行下面的移动代码的示例,我觉得我的语法是错误的添加另一个条件,它说“(diamondlist.Count)&(Playerlist.Count)。我得到的错误是”运营商'&'不能应用于'bool'和'int'类型的操作数。我试图添加双“&&”这并没有解决它的问题,任何帮助都表示赞赏 - 谢谢:D

    protected override void Update(GameTime gameTime)
    {
        for (int i = 0; i < (diamondlist.Count) & (Playerlist.Count); i++)
        {
            if ((Playerlist[i].Position == diamondlist[i].Position) && kb_old.IsKeyDown(Keys.W))
            {
                if (currentMap.isWalkable(new Point(diamondlist[i].m_position.X, diamondlist[i].m_position.Y - 1)))
                    diamondlist[i].m_position.Y--;
            }

8 个答案:

答案 0 :(得分:11)

有一些问题。

  1. 表达式i < (diamondlist.Count) & (Playerlist.Count)的评估结果为:

    (i < diamondlist.Count) & Playerlist.Count
    

    表达式的第一部分(i < diamondlist.Count)是bool,但第二部分(Playerlist.Count)是int。这是抱怨,因为&不接受两种不同的类型。

  2. 然后您尝试应用&(对于整数)bitwise AND operator。如果两种类型相同,这将起作用,但它可能导致花费不必要的CPU周期,并且通常不在布尔表达式中使用。您可能希望使用&& - logical or conditional and operator

  3. 请改为尝试:

    for (int i = 0; i < diamondlist.Count && i < Playerlist.Count; i++)
    {
        ...
    }
    

答案 1 :(得分:5)

如何简化测试条件?

int maxValue = System.Math.Min(diamondlist.Count,Playerlist.Count);
for (int i = 0; i < maxValue; i++)

答案 2 :(得分:2)

每项检查都是相互独立的。你必须明确你正在检查什么。当你说“我少于diamondlist.Count和playerList.Count ”时,你的意思是“我比diamondlist.Count少,而且我比playerlist.Count 少。” p>

for (int i = 0; (i < diamondlist.Count) && (i < Playerlist.Count); i++)
....

答案 3 :(得分:0)

for (int i = 0; i < (diamondlist.Count) && i < (Playerlist.Count); i++)

答案 4 :(得分:0)

我不确定你想要达到的目标,但我认为这就是你想要的:

for(int i = 0; i&lt;(diamondlist.Count&amp;&amp; i&lt; Playerlist.Count; i ++)

答案 5 :(得分:0)

您可以尝试:for (int i = 0; i < (diamondlist.Count) & i < (Playerlist.COunt); i++)

您收到的错误似乎表明i < (diamondlist.Count) & (Playerlist.Count)正在执行比较i < (diamondlist.Count)并执行& (Playlist.Count),这是一个int

答案 6 :(得分:0)

如果您打算检查这两个条件,那么它将如下所示:

for (int i = 0; i < diamondlist.Count && i < Playerlist.Count; i++) ...

&安培;&安培;是逻辑AND运算符。 &安培;是按位AND运算符。

答案 7 :(得分:0)

将此视为计算机。它需要一个在那里评估为真或假的东西。用英语,你有:

IF (i is less than this) AND (this)

它无法评估第二个表达式,因为没有比较(虽然似乎是人类)。所以你必须让它更广泛,并做:

IF (i is less than this) AND (i is less than this)
相关问题