我正在生成2个随机数:
1)第一个数字必须是1到30之间的任意数字
2)第二个数字必须是1到10之间的任意数字
我只是想将第一个数字除以第二个数字,反之亦然,最后,警告结果。我的问题是如何获得2个随机数除法的结果?谁能指出我正确的方向?提前谢谢!!
注意:第一个数字必须可被第二个数字整除。
这是我的代码:
var arr = [];
for (var i = 0; i < 2; i++) {
do {
var firstRandomNumber = Math.floor(Math.random()*30) + 1;
var secondRandomNumber = Math.floor(Math.random()*10) + 1;
if(firstRandomNumber % secondRandomNumber === 0){
correctResult = result;
arr.push(correctResult);
}
} while ((firstRandomNumber % secondRandomNumber === 0));
}
console.log(arr);
答案 0 :(得分:2)
我建议使用一种更实用的方法:创建一个函数,该函数创建两个随机数,如果一个可以被另一个整除,则将其返回。然后,只需调用该函数,直到得到真实结果:
function tryGetDivisible() {
var firstRandomNumber = Math.floor(Math.random() * 30) + 1;
var secondRandomNumber = Math.floor(Math.random() * 10) + 1;
if (firstRandomNumber % secondRandomNumber === 0) {
console.log(firstRandomNumber, secondRandomNumber);
return firstRandomNumber / secondRandomNumber;
}
}
let result;
while (!result) result = tryGetDivisible();
const arr = [result];
console.log(arr);
答案 1 :(得分:1)
几件事:
while
循环应该一直循环到firstRandomNumber % secondRandomNumber === 0
,因此您要在不正确的情况下继续循环。result
没有设置任何位置,因此我将结果添加到了数组中if(firstRandomNumber % secondRandomNumber === 0){
是多余的。当do / while循环完成时,它将具有匹配的do编号。只需将arr.push()
移到该循环之外即可。
var arr = [];
for (var i = 0; i < 2; i++) {
do {
var firstRandomNumber = Math.floor(Math.random()*30) + 1;
var secondRandomNumber = Math.floor(Math.random()*10) + 1;
} while ((firstRandomNumber % secondRandomNumber !== 0));
console.log('first', firstRandomNumber, 'second', secondRandomNumber);
arr.push(firstRandomNumber / secondRandomNumber);
}
console.log(arr);
答案 2 :(得分:0)
一种更简单的方法是获取第一个随机数,然后尝试获取第二个随机数,直到它们被整除。所以这是代码:
var firstRandomNumber = Math.floor(Math.random()*30) + 1;
while (firstRandomNumber % secondRandomNumber !== 0) {
var secondRandomNumber = Math.floor(Math.random()*10) + 1;
}
console.log(firstRandomNumber + "," + secondRandomNumber);
答案 3 :(得分:0)
由于第一个必须可被第二个整除,所以我的方法是:
Math.floor(30/firstNumber)
)。这样,就不需要进行生成和测试循环,而在生成成功的配对之前,该循环可以无限制地进行。
答案 4 :(得分:0)
如果要避免while
循环,可以选择第一个数字,然后将可能的第二个数字组合在一个数组中。然后随机选择其中之一:
let first = Math.floor(Math.random() * 10) + 1
// all possible divisible numbers
let factors = Array.from({length: 30}, (_, i) => i + 1)
.filter(i => first % i === 0 || i % first === 0)
//pick one
let second = factors[Math.floor(Math.random() * factors.length)]
console.log(first, second)