C# 继续之前,需要循环检查2个条件

C# 继续之前,需要循环检查2个条件,c#,loops,for-loop,conditional-statements,C#,Loops,For Loop,Conditional Statements,我目前正在开发一个非常基础的“Sokoban”游戏。我试图使这个循环,但似乎无法完成它。我的目标是执行下面的移动代码示例,我觉得我的语法在添加另一个条件(diamondlist.Count)和(Playerlist.Count)时是错误的。我得到的错误是“Operator”和“Operator”不能应用于“bool”和“int”类型的操作数。我已经尝试添加了双“&&”,但这并不能解决问题。他们非常感谢您的帮助-谢谢:D protected override void Update(Gam

我目前正在开发一个非常基础的“Sokoban”游戏。我试图使这个循环,但似乎无法完成它。我的目标是执行下面的移动代码示例,我觉得我的语法在添加另一个条件(diamondlist.Count)和(Playerlist.Count)时是错误的。我得到的错误是“Operator”和“Operator”不能应用于“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--;
            }
受保护覆盖无效更新(游戏时间游戏时间)
{
对于(inti=0;i<(diamondlist.Count)和(Playerlist.Count);i++)
{
if((Playerlist[i].Position==diamondlist[i].Position)和&kb_old.IsKeyDown(Keys.W))
{
if(currentMap.isWalkable(新点(diamondlist[i].m_position.X,diamondlist[i].m_position.Y-1)))
钻石列表[i].m_position.Y--;
}
用于(int i=0;i<(diamondlist.Count)和&i<(Playerlist.Count);i++)

每个检查都是相互独立的。你必须明确你要检查的内容。当你说“我小于diamondlist.Count和playerList.Count”时,你真正的意思是“我小于diamondlist.Count和我小于playerList.Count”

for(inti=0;(i
有几个问题

  • 表达式
    i<(diamondlist.Count)和(Playerlist.Count)
    的计算公式为:

    (i < diamondlist.Count) & Playerlist.Count
    

    简化测试条件怎么样

    int maxValue = System.Math.Min(diamondlist.Count,Playerlist.Count);
    for (int i = 0; i < maxValue; i++)
    
    intmaxvalue=System.Math.Min(diamondlist.Count,Playerlist.Count);
    对于(int i=0;i
    我不确定您到底想要实现什么,但我认为这正是您想要的:

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


    您得到的错误似乎表明执行
    i<(diamondlist.Count)&(Playerlist.Count)
    时执行比较
    i<(diamondlist.Count)
    ,并使用
    (Playlist.Count)执行
    &
    ,它是一个int。

    如果您想同时检查这两个条件,那么它将如下所示:

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

    &&是逻辑AND运算符。&是位AND运算符。

    像计算机一样思考这个问题。它需要一个计算结果为真或假的东西。在英语中,您有:

    IF (i is less than this) AND (this)
    
    它无法评估第二个表达式,因为没有进行比较(虽然对人类来说似乎是这样)。因此,你必须将其扩大一点,并做到:

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

    显然,这是最好的解决方案,也是唯一的原始解决方案。但请注意,OP还应该从其他答案中学习(一个答案就足够了…)
    for (int i = 0; i < diamondlist.Count && i < Playerlist.Count; i++) ...
    
    IF (i is less than this) AND (this)
    
    IF (i is less than this) AND (i is less than this)