如何生成0到2之间的随机数,不包括1?我目前使用的功能是:
public static int DecRandomNumber(int min, int max)
{
lock (syncLock)
{
// synchronize
int val = Convert.ToInt32(random.Next(0, 3));
return(val == 1 ? 2 : 0);
}
}
然而,根本没有概括 ,因为我没有使用min和max,并且碰巧知道min总是1而max最多为3 。 实现这一目标的最佳方法是什么? 感谢。
答案 0 :(得分:2)
有几种方法。一个可能是生成一个从0到1的随机数并乘以2:
int val = random.Next(0, 2); // gives 0 or 1
return val * 2; // returns 0 * 2 = 0 or 1 * 2 = 2 with equal probability
或者你可以生成一个double并使用三元组来控制概率:
return random.NextDouble() < 0.5 ? 0 : 2;
答案 1 :(得分:1)
return random.Next() % 2 == 0 ? min : max;
答案 2 :(得分:0)
这是一个有趣的问题,但对于需要更多功能的人,我建议使用以下伪代码:
public class RandomBrokenSequence
{
private List<int> items;
private Random random;
public RandomBrokenSequence()
{
items = new List<int>();
random = new Random();
}
public int Next()
{
return items[random.Next(0,items.Count)];
}
public void Add(int item){ /*You get the idea*/ }
public void RemoveIfFound(int item){ /*You get the idea*/ }
public void AddRange(int start, int end){ /*You get the idea*/ }
public void RemoveRange(int start, int end){ /*You get the idea*/ }
}
然后你可以添加范围0-100,然后说删除7和15-25,或者你心中的内容。基本上我们只是创建了一个映射。如果你只需要两个随机值,这将有点落伍,但有趣的是可以在随机集改变的场景中使用。