Javascript 在两组值之间生成随机数的最佳方法

Javascript 在两组值之间生成随机数的最佳方法,javascript,random,Javascript,Random,我需要生成一个介于-40和-10以及10和40之间的随机数。所以结果可能是25,但永远不会是-5或5 我在网上看过,但解决方案似乎过于复杂。有没有办法只用一两行就可以做到这一点?生成一个介于10和40之间的数字,然后生成一个1或0,如果是0,则将其转换为负1并乘以其中一个结果 Math.random()*30+(Math.random()

我需要生成一个介于-40和-10以及10和40之间的随机数。所以结果可能是25,但永远不会是-5或5


我在网上看过,但解决方案似乎过于复杂。有没有办法只用一两行就可以做到这一点?

生成一个介于10和40之间的数字,然后生成一个1或0,如果是0,则将其转换为负1并乘以其中一个结果
Math.random()*30+(Math.random()<0.5?-40:10)

生成一个介于10和40之间的数字,然后生成一个1或0,如果为0,则将其转换为负1并乘以其中一个结果
Math.random()*30+(Math.random()<0.5?-40:10)

Math.random()将返回一个介于0和1之间的随机数

创建自己的函数,在最小值和最大值之间创建一个随机数。在最小值和最大值之间缩放一个随机数,然后用最小值进行偏移

function randomBetween(min, max) {
  return Math.random() * (max - min) + min;
}
Math.random()将返回一个介于0和1之间的随机数

创建自己的函数,在最小值和最大值之间创建一个随机数。在最小值和最大值之间缩放一个随机数,然后用最小值进行偏移

function randomBetween(min, max) {
  return Math.random() * (max - min) + min;
}
算法为(rand*(max-min))+min

算法为(rand*(max-min))+min


这是62个不同的值,每个子范围31个,因此:

r = Math.floor(Math.random()*62);
if (r < 31) { r -= 40; } else { r -= 21; }
r=Math.floor(Math.random()*62);
如果(r<31){r-=40;}否则{r-=21;}

这是62个不同的值,每个子范围31个,因此:

r = Math.floor(Math.random()*62);
if (r < 31) { r -= 40; } else { r -= 21; }
r=Math.floor(Math.random()*62);
如果(r<31){r-=40;}否则{r-=21;}
var n=Math.random()*62;
返回n-(n<31?40:21);
var n=Math.random()*62;
返回n-(n<31?40:21);
在这种情况下,给出了较低的值,即15

注意:如果你使用i,你需要从值的上键中减去4 在这种情况下,给出了较低的值,即15



注意:您需要从值的上键中减去4,也就是说,如果您使用i,那么写入此值的最优雅方式是什么?var result=Math.random()*30+(Math.random()<0.5?-40:10)@MattHouser,很好的简化也可以,但是需要调用random()两次,这将是必要的两倍。另外,他似乎想要整数值。@LeedianelCrocker,对random的2次调用速度不是很快,这显然不是一个性能关键型应用程序,而且我的解决方案比你的解决方案更优雅、可读性更强,更不用说更可扩展到其他情况了写这个的最优雅方式是什么?var result=Math.random()*30+(Math.random() < 0.5 ? -40 : 10);@MattHouser,很好的简化也可以,但是需要调用random()两次,这将是必要的两倍。另外,他似乎想要整数值。@LeedianelCrocker,对random的2次调用并不是一个巨大的速度冲击。这显然不是一个性能关键型应用程序,我的解决方案比你的更优雅、可读性更强,更不用说更可扩展到其他情况。哪些解决方案过于复杂?哪些解决方案过于复杂?接近,但没有雪茄。将这些常量更改为62、31、40和21。OP指定了包含范围。我想我可能会受到off by 1错误的影响。我真的不应该这么晚才写代码,那样更好。不过OP似乎暗示了整数。不确定这是否是他真正想要的。对。我们可以把它放在地板上。关上,但不要雪茄。将这些常量更改为62、31、40和21。OP指定了包含范围。我想我可能会受到off by 1错误的影响。我真的不应该这么晚才写代码,那样更好。不过OP似乎暗示了整数。不确定这是否是他真正想要的。是的。我们可以把它放在地板上。没有回答所问的问题。没有,但我是从谷歌搜索来这里寻找这段代码的。我现在可以继续写代码了,而不是用谷歌搜索:-)没有回答问题。没有,但我是通过谷歌搜索找到这段代码的。我现在可以继续编写代码,而不是用谷歌搜索:-)他想在给定的条件下生成一个数字。他想在给定的条件下生成一个数字。
var n = Math.random()*62;
return n - (n < 31 ? 40 : 21);
for(int i=15;i<=46;i++)
{
    double random=Math.rand()*5+i; 
    int rand=(int)random;
    System.out.println(rand);

}
Math.random()*5=i