为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

呼啦一阵风 2023-01-06 16:36:23

下午好,我正在尝试创建两个具有以下条件的随机数:它们都在 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)。


任何帮助将不胜感激。


查看完整描述

5 回答

?
四季花海

TA贡献1556条经验 获得超5个赞

你不应该循环,而只是一般地做:

x = Math.floor(Math.random() * 90) + 10
y = Math.floor(Math.random() * (x - 10)) + 10


查看完整回答
反对 回复 2023-01-06
?
holdtom

TA贡献1551条经验 获得超1个赞

希望这会回答你的问题


function randomNumbers() {

    var temp_list;

    temp_list = [

        Math.floor(Math.random() * 90 + 10),

        Math.floor(Math.random() * 90 + 10)

    ];

    temp_list.sort();


    var x = temp_list[1];

    var y = temp_list[0];


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

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

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

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


}

如果您不想在 x 和 y 中使用相同的值:


function randomNumbers() {

    var temp_list;

    do {

        temp_list = [

            Math.floor(Math.random() * 90 + 10),

            Math.floor(Math.random() * 90 + 10)

        ];

    } while (temp_list[0] == temp_list[1])

    temp_list.sort();


    var x = temp_list[1];

    var y = temp_list[0];


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

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

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

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

}


查看完整回答
反对 回复 2023-01-06
?
慕尼黑5688855

TA贡献1607条经验 获得超2个赞

您需要为您的数字引入一个偏移量 - 对于第一个数字,它从 10 开始;对于第二个数字,所以它从第一个数字开始。


let min = 10,

    first = Math.floor(Math.random() * (100 - min)) + min,

    second = Math.floor(Math.random() * (100 - first)) + first;

实际上这允许两个数字相等。否则,如果第一个数字是 100,那么第二个数字就什么也不是了。


查看完整回答
反对 回复 2023-01-06
?
MYYA

TA贡献1620条经验 获得超4个赞

这可能会解决您的问题:


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

};


查看完整回答
反对 回复 2023-01-06
?
温温酱

TA贡献1511条经验 获得超3个赞

让我们来看看这里的案例

首先,您将 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


查看完整回答
反对 回复 2023-01-06
  • 5 回答
  • 0 关注
  • 24 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信