无法找出无限循环

时间:2016-01-26 23:31:38

标签: c# loops unity3d

我列出了在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总是potites.Length / 4和最小1.

roomtype是该位置的房间类型(在2d int数组中)

1 个答案:

答案 0 :(得分:1)

看起来您正在使用相同的int rpotSitesR.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
    }

我希望有所帮助!