-5

我怎样才能有不能使用的 xy 坐标?假设我不想使用 xy (5,5) 和 (7,9)。我怎样才能做到这一点?

x = random.Next(0, 20);
y = random.Next(0, 20);

// if xy coordinate is (5,5) or (7,9), keep trying the above to obtain a different xy value

创建 xy 坐标时,如何使某些坐标不可用?

4

2 回答 2

1

您可以请求一个数字来填充第n 个空闲时隙并跟踪空闲时隙(例如,对每个时隙使用布尔值),而不是要求一个从 0 到(最大时隙)的随机数。

开始free time lots = max slots,然后free time slots在每次分配后减少。遍历插槽 - O(n) - 并填充第 n 个空闲插槽,n 是返回的数字Random.Next(0, freeSlots)

于 2013-07-21T17:44:09.227 回答
0

只需循环创建,直到满足您的条件:

var forbidden = new List<Tuple<int, int>>();
forbidden.Add(new Tuple<int, int>(5, 5));
forbidden.Add(new Tuple<int, int>(7, 9));
while(true)
{
    x = random.Next(0, 20);
    y = random.Next(0, 20);
    if(forbidden.All(t => x != t.Item1 || y != t.Item2)) break;
}

这样,只有当您有“允许”的坐标时,循环才会终止,即到达break语句。

于 2013-07-21T18:20:12.607 回答