需要for循环在继续之前检查2个条件
本文关键字:检查 2个 条件 继续 for 循环 需要 | 更新日期: 2023-09-27 18:11:38
我目前正在开发一款非常基础的"Sokoban"游戏。我试图使这个循环,但似乎不能完成它。我的目的是执行下面的移动代码的一个例子,我觉得我的语法是错误的,关于添加另一个条件,它说"(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--;
}
有几个问题。
-
表达式
i < (diamondlist.Count) & (Playerlist.Count)
求值为:(i < diamondlist.Count) & Playerlist.Count
表达式的第一部分(
i < diamondlist.Count
)是bool
,而第二部分(Playerlist.Count
)是int
。它在抱怨,因为&
不接受两种不同的类型。 -
然后尝试应用
&
(对于整数)是位与运算符。如果这两种类型是相同的,这将工作,但它可能导致花费不必要的CPU周期,通常不用于布尔表达式。您可能想使用&&
——逻辑或条件和操作符。
试试这个:
for (int i = 0; i < diamondlist.Count && i < Playerlist.Count; i++)
{
...
}
如何简化您的测试条件?
int maxValue = System.Math.Min(diamondlist.Count,Playerlist.Count);
for (int i = 0; i < maxValue; i++)
每个检查都是相互独立的。你必须明确你要检查什么。当你说"小于钻石列表。"Count和playerList。Count"你真正的意思是"i less than diamondlist。".
for (int i = 0; (i < diamondlist.Count) && (i < Playerlist.Count); i++)
....
for (int i = 0; i < (diamondlist.Count) && i < (Playerlist.Count); i++)
我不知道你到底想要什么,但我认为这就是你想要的:
for (int I = 0;我& lt;(diamondlist。数,,我& lt;Playerlist.Count;我+ +)
你可以试试:for (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++) ...
,,是逻辑与运算符。,
把它想象成一台电脑。它需要一个值为真或假的东西。在英语中,你有:
IF (i is less than this) AND (this)
它不能计算第二个表达式,因为没有进行比较(尽管对人类来说似乎有)。所以你必须把它写得更宽一些,然后写:
IF (i is less than this) AND (i is less than this)