2个数字之间的随机整数,不包括中间项

时间:2014-07-07 20:08:38

标签: c# random

如何生成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 。 实现这一目标的最佳方法是什么? 感谢。

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)

编辑:误解了你的问题,再试一次。这个解决方案使用你的min&amp;最大值:

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,或者你心中的内容。基本上我们只是创建了一个映射。如果你只需要两个随机值,这将有点落伍,但有趣的是可以在随机集改变的场景中使用。