我需要在我设置的范围内显示一个奇数input
随机数。我尝试使用带有if的for循环,但我的程序“thunders”。
这就是我现在所拥有的:
var min = 200;
var max = 300;
var semrandom;
semrandom = Math.floor(Math.random() * max) + min;
if ((semrandom % 2) == 0) {
continue;
}
document.getElementById('semilla').setAttribute("value", `${semrandom}`);
如果它生成一个随机数,但不是一个奇数随机数。问题是,我怎样才能得到它?
在某些情况下,不需要使用递归。这是其中之一。 奇数的形式是 2n + 1所以如果 n 是一个随机数,那么 2n + 1 也是一个随机数。使用这个基本原理,获得所需范围(200 到 300)内的奇数随机数的解决方案如下:
从那里很容易对任意范围进行概括。
一般解决方案:正如我前段时间(在评论中)提供的那样,应用该想法的一般功能如下:
该错误是由于该指令
continue
用于跳过重复循环的迭代,因为它没有循环(例如,for/while)它会给您错误一旦清楚这一点,如果我们像数学家一样思考,奇数的公式是:
它保证我们
2X
的数字是偶数,然后我们加 1 使它成为奇数,当它是偶数时我们必须加一为了优化代码,我们将依靠来自@Trauma.JS的疯子的例子来知道什么是偶数/奇数,我们应用了其他特征,我们有以下几点:
如果数字是偶数并且在此之前有一个 Javascript 总和将其
!(X & 1)
更改为true
true
1
查找奇数随机数
找到奇数随机数的一种可能解决方案是使用递归。因此,您必须创建一个名为oddRandom() 的函数。
例如:
它将执行以下指令,使其看起来像这样:
一旦准备好,我们将以与此类似的方式实现它:
其中min和max是由我们想要获得的随机数组成的区间。
播放示例:
为了不让这个答案太长,我们将创建一个可重现的示例,您可以在其中测试它并直接在您的项目中实现它:
从上面的示例中,您只需要考虑JavaScript代码,这就是产生所需结果的原因。毕竟,需要的数字是奇数随机数。
可以在您的文本框中复制相同的示例,如下所示:
document.getElementById("semilla")
如果id
文本框的 是则不需要放置id="semilla"
。方法:
您提供的代码似乎是解决方案,但是在
continue
简单的条件结构中使用保留字会返回此错误:在我看来,如果你想控制你的代码将根据它是偶数还是奇数来执行的操作,那么我们可以将它放在一个函数中,这样如果获得的数字是偶数,我们就做 a
return false;
否则我们例如,可以打印所述值。return
只能在函数上下文中使用continue
只能在循环体中存在的条件的上下文中表达;如需进一步参考,请阅读此处例子
在两个大于零的整数间隔之间获取随机数的正确函数是
Math.floor((Math.random() * (max - min + 1)) + min)
您将看到您的函数超出了最大范围。此外,不需要递归或任何类似的东西,因为如果我们向偶数加或减 1,奇数总是从偶数中获得。Math.floor((Math.random() * max) + min);
最大值实际上是 499、299 + 200,因为它Math.random()
永远不是 1,所以第一部分永远不会是 300。另一方面,
max - min + 1
它为我们提供了我们被限制的数字范围,+1 是包含缺失的数字,因为Math.random()
它永远不是 1。+min
它是运行范围min
时间。