无法弄清楚无限循环

本文关键字:无限循环 弄清楚 | 更新日期: 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来决定着陆点的行坐标和列坐标。这将始终从具有相同索引的potSitesRpotSitesC中选择位置,即(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
    }

我希望这有所帮助!