首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从2个不同的范围生成随机数

从2个不同的范围生成随机数
EN

Stack Overflow用户
提问于 2015-11-13 05:08:36
回答 4查看 4.9K关注 0票数 4

如何从两个不同的范围生成随机数?

例如: 10-20和50-60中的一个数字。

我知道如何从一个范围(1-13)生成随机数:

代码语言:javascript
复制
Random rnd = new Random();
int num = rnd.Next(1, 13);
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-11-13 05:14:41

代码语言:javascript
复制
int num = rnd.Next(1, 3)==1 ? rnd.Next(10, 21) : rnd.Next(50,61);

代码语言:javascript
复制
int num = rnd.Next(10, 32);
if (num>20) num+=29;

或者只是为了好玩(不要在大范围内使用,而且运行起来也很慢):

代码语言:javascript
复制
var ranges=new []{ Tuple.Create(10,20), Tuple.Create(50,60)};
var rnd=new Random();
var possible=ranges.Select(x=>Enumerable.Range(x.Item1,x.Item2-x.Item1+1))
  .SelectMany(x=>x)
  .Distinct();
var num=possible.Skip(rnd.Next(0,possible.Count())).First();
票数 6
EN

Stack Overflow用户

发布于 2015-11-13 05:14:55

记住,对于下一个方法,下限是包含的,而上限是独占的。这样如何:

代码语言:javascript
复制
var rand = new Random();
var num1 = rand.Next(10, 21);

var num2 = rand.Next(50, 61);

var myNum = rand.Next(0, 2) == 1 ? num1 : num2;
票数 2
EN

Stack Overflow用户

发布于 2015-11-13 05:17:07

您将生成22个不同的随机数,10-20和50-60。所以首先要做的就是:

代码语言:javascript
复制
int randomNumber = rnd.Next(0, 22);

现在,你有了从0到21的随机数。

添加十个:

代码语言:javascript
复制
randomNumber += 10;

现在,你有10到31之间的随机数。

将所有数字加上29 >= 21:

代码语言:javascript
复制
if (randomNumber >= 21) {
    randomNumber += 29;
}

现在,你有从10到20,从50到60的随机数。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33681387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档