【问题标题】:Need for loop to check 2 conditions before continuing在继续之前需要循环检查 2 个条件
【发布时间】:2013-04-25 20:02:23
【问题描述】:

我目前正在开发一个非常基础的“推箱子”游戏。我正在尝试制作这个 for 循环,但似乎无法完成它。我的目标是执行下面的移动代码示例,我觉得我的语法在添加另一个条件时是错误的,其中显示“(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--;
            }

【问题讨论】:

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


    【解决方案1】:

    有几个问题。

    1. 表达式i &lt; (diamondlist.Count) &amp; (Playerlist.Count) 被计算为:

      (i < diamondlist.Count) & Playerlist.Count
      

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

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

    试试这个:

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

    【讨论】:

      【解决方案2】:

      简化你的测试条件怎么样?

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

      【讨论】:

      • 显然是最好的解决方案,也是唯一的原始解决方案。
      • 但请注意 OP,他还应该从其他答案中学习(一个就足够了......)
      【解决方案3】:

      每个检查都是相互独立的。你必须明确你正在检查的内容。当您说“i 小于 diamondlist.Count 和 playerList.Count”时,您的意思是“i 小于 diamondlist.Count 并且 i 小于 playerlist.Count”。 p>

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

      【讨论】:

        【解决方案4】:
        for (int i = 0; i < (diamondlist.Count) && i < (Playerlist.Count); i++)
        

        【讨论】:

          【解决方案5】:

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

          for (int i = 0; i

          【讨论】:

            【解决方案6】:

            你可以试试:for (int i = 0; i &lt; (diamondlist.Count) &amp; i &lt; (Playerlist.COunt); i++).

            您收到的错误似乎表明 i &lt; (diamondlist.Count) &amp; (Playerlist.Count) 正在执行,因为正在执行比较 i &lt; (diamondlist.Count) 并将 &amp;(Playlist.Count) 进行比较,这是一个 int。

            【讨论】:

              【解决方案7】:

              如果您打算同时检查这两个条件,则如下所示:

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

              && 是逻辑与运算符。 & 是按位与运算符。

              【讨论】:

                【解决方案8】:

                把它想象成一台电脑。它需要一个在那里评估为真或假的东西。用英语,你有:

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

                它无法评估第二个表达式,因为没有进行比较(尽管对于人类来说似乎存在)。所以你必须让它更宽泛一点,然后做:

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

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2021-11-26
                  • 2020-07-14
                  • 2022-01-18
                  • 2015-03-25
                  • 2021-09-21
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多