无法弄清楚无限循环
本文关键字:无限循环 弄清楚 | 更新日期: 2023-09-27 18:32:05
我有一个潜在站点列表,可以在 2D 数组中放置着陆垫。它们保存在 2 个整数中,一个用于行,一个用于列。我需要从此列表中随机添加一些登陆站点,但由于某种原因,它经常使用相同的位置。我想以某种方式排除这些斑点,所以我使用了这个循环,但由于某种原因它锁定在一个无限循环中,我只是不知道为什么!
for(int j = 0; j < amountLandingPads; j++)
{
int r = Random.Range(0,potSitesC.Length-1);
while(roomType[potSitesR[r],potSitesC[r]] == (int)room.Landing)
{
r = Random.Range(0,potSitesC.Length-1);
}
roomType[potSitesR[r],potSitesC[r]] = (int)room.Landing;
//do more stuff
}
对我来说,如果当前站点已经被指定为着陆点,请随机选择另一个,直到找到一个不是着陆点的站点,我做错了什么?
potSites.Length总是20+,ammountLandingPads总是potsites。长度/4 和最小 1。
房间类型是该位置的房间类型(在 2D int 数组中)
看起来您使用相同的int r
,并且potSitesR.Length
来决定着陆点的行坐标和列坐标。这将始终从具有相同索引的potSitesR
和potSitesC
中选择位置,即(potSitesR[1],potSitesC[1])或(potSitesR[2],potSitesC[2]),等等......并且始终在 potSitesR.Length 范围内。
尝试对两者使用不同的值以进行更多随机化。下面是示例代码:
for(int j = 0; j < amountLandingPads; j++)
{
//In the following statement
//Removed -1 because int version is exclusive of second parameter
//Changed it to potSitesR.Length (from potSitesC.Length)
int r = Random.Range(0, potSitesR.Length);
//second randomized number for column-randomization.
int c = Random.Range(0, potSitesC.Length);
while (roomType[potSitesR[r],potSitesC[c]] == (int)room.Landing) //using both randomized numbers
{
r = Random.Range(0, potSitesR.Length); // r from potSitesR.Length
c = Random.Range(0, potSitesC.Length); // c from potSitesC.Length
}
roomType[potSitesR[r], potSitesC[c]] = (int)room.Landing;
//do more stuff
}
我希望这有所帮助!