JS while循环在&&之后不读取条件

下午好,我正在尝试创建两个具有以下条件的随机数:它们都在 10 到 99 之间,并且第二个数字小于第一个数字。我写了以下代码:


window.onload= function() {

            var x = Math.floor(Math.random() * 100);

            while (x < 10) {

                 x = Math.floor(Math.random() * 100)

            }

            var y = Math.floor(Math.random() * 100);

            while ((y < 10) && (y<x)) {

                 y = Math.floor(Math.random() * 100)

            };

            document.getElementById("var1").innerHTML = x;

            document.getElementById("var2").innerHTML = y;

            var z = parseInt( x) - parseInt(y);

            document.getElementById("var3").innerHTML= z;


        };

问题在于,虽然两个数字都大于 10 且小于 100,但第二个数字 (var y) 并不总是小于第一个 (var x)。


任何帮助将不胜感激。


呼啦一阵风
浏览 121回答 5
5回答

四季花海

你不应该循环,而只是一般地做:x&nbsp;=&nbsp;Math.floor(Math.random()&nbsp;*&nbsp;90)&nbsp;+&nbsp;10 y&nbsp;=&nbsp;Math.floor(Math.random()&nbsp;*&nbsp;(x&nbsp;-&nbsp;10))&nbsp;+&nbsp;10

holdtom

希望这会回答你的问题function randomNumbers() {&nbsp; &nbsp; var temp_list;&nbsp; &nbsp; temp_list = [&nbsp; &nbsp; &nbsp; &nbsp; Math.floor(Math.random() * 90 + 10),&nbsp; &nbsp; &nbsp; &nbsp; Math.floor(Math.random() * 90 + 10)&nbsp; &nbsp; ];&nbsp; &nbsp; temp_list.sort();&nbsp; &nbsp; var x = temp_list[1];&nbsp; &nbsp; var y = temp_list[0];&nbsp; &nbsp; document.getElementById("var1").innerHTML = x;&nbsp; &nbsp; document.getElementById("var2").innerHTML = y;&nbsp; &nbsp; var z = parseInt(x) - parseInt(y);&nbsp; &nbsp; document.getElementById("var3").innerHTML= z;}如果您不想在 x 和 y 中使用相同的值:function randomNumbers() {&nbsp; &nbsp; var temp_list;&nbsp; &nbsp; do {&nbsp; &nbsp; &nbsp; &nbsp; temp_list = [&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Math.floor(Math.random() * 90 + 10),&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Math.floor(Math.random() * 90 + 10)&nbsp; &nbsp; &nbsp; &nbsp; ];&nbsp; &nbsp; } while (temp_list[0] == temp_list[1])&nbsp; &nbsp; temp_list.sort();&nbsp; &nbsp; var x = temp_list[1];&nbsp; &nbsp; var y = temp_list[0];&nbsp; &nbsp; document.getElementById("var1").innerHTML = x;&nbsp; &nbsp; document.getElementById("var2").innerHTML = y;&nbsp; &nbsp; var z = parseInt(x) - parseInt(y);&nbsp; &nbsp; document.getElementById("var3").innerHTML = z;}

慕尼黑5688855

您需要为您的数字引入一个偏移量 - 对于第一个数字,它从 10 开始;对于第二个数字,所以它从第一个数字开始。let min = 10,&nbsp; &nbsp; first = Math.floor(Math.random() * (100 - min)) + min,&nbsp; &nbsp; second = Math.floor(Math.random() * (100 - first)) + first;实际上这允许两个数字相等。否则,如果第一个数字是 100,那么第二个数字就什么也不是了。

MYYA

这可能会解决您的问题:window.onload= function() {&nbsp; &nbsp; var x = Math.floor(Math.random() * 100);&nbsp; &nbsp; while (x < 10) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;x = Math.floor(Math.random() * 100)&nbsp; &nbsp; }&nbsp; &nbsp; var y = Math.floor(Math.random() * 100);&nbsp; &nbsp; while (y < 10 || y>x) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;y = Math.floor(Math.random() * 100)&nbsp; &nbsp; };&nbsp; &nbsp; document.getElementById("var1").innerHTML = x;&nbsp; &nbsp; document.getElementById("var2").innerHTML = y;&nbsp; &nbsp; var z = parseInt( x) - parseInt(y);&nbsp; &nbsp; document.getElementById("var3").innerHTML= z};

温温酱

让我们来看看这里的案例首先,您将 x 设置为 0 到 100 之间的任何值,然后,如果该值恰好小于 10,则您不断将其再次设置为另一个可能介于 0 到 100 之间的随机数,直到它大于 10首先,如果每次结果都小于 10,它可能会永远循环(无穷大不太可能,但在可能的范围内),如果你想获得 10-100 之间的随机数,只需加十并取走10 的乘法,比如Math.floor(Math.random() * (100-10)) + 10反正你也不需要 while 循环无论如何,一旦 x 被设置为 10 到 100 之间的值,让我们看看您还在做什么,让我们假设 x 结果为 90然后,您将 y 设置为 0 到 100 之间的任意值(一开始),假设结果为 3然后你先检查它是否小于 10,然后继续添加。同样,首先,您可以使用上面的相同方程式得到 10-100 之间的值,但无论如何,我们假设 y 的值为 95问题是,将它保持在 10 以下的 while 循环与小于 x 的条件放在一起,这意味着如果它首先大于 10,则 while 循环的第二个条件是保持它小于x, 永远不会被执行,所以如果 y 以 39 或 11 到 38 之间的任何值开始,那么 while 循环中什么也不会发生,因为小于 10 的条件从未满足所以如果你想保持 while 循环的情况,你可以将两个 while 循环相互嵌套,首先保持它低于 x,然后在内部的循环中,也保持它高于 10但是您不必为此使用 while 循环。首先将 x 的值设置为var x = Math.floor(Math.random() * (100-10)) + 10然后,您只需将 y 保持在 10 到 x 的范围内,因此对这些起始值和结束值使用相同的公式var y = Math.floor(Math.random() * (x - 10)) + 10
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript