我是Java语言的新手,它试图使自己适应Functions
,For
循环和If
语句。我正在做一个简单的练习,该练习从一个函数调用中生成5个随机数。我努力拼凑的一点逻辑是比较Math.random创建的数字,这些数字被推到数组中。最好的方法来确保要推入数组的所有数字都是唯一的(无重复)?我会在If
代码块中添加一个For
语句来检查每个数字,如果它们匹配,请重新运行Math.random函数?试图找出这是否是解决问题的最佳方法。
function randoNumbers(min, max){
let randomNumbers = [];
for (let counter = 0; counter < 5 ; counter++){
randomNumbers.push(Math.floor(Math.random() * (max - min) + +min));
}
console.log(randomNumbers);
}
randoNumbers(1, 10);
答案 0 :(得分:2)
一种非常简单的解决方案是生成数字,直到生成的数字尚未包含在数组中,然后将其推送到结果数组中:
function randoNumbers(min, max) {
const randomNumbers = [];
for (let counter = 0; counter < 5; counter++) {
let num;
do {
num = Math.floor(Math.random() * (max - min) + min);
}
while (randomNumbers.includes(num))
randomNumbers.push(num);
}
console.log(randomNumbers);
}
randoNumbers(1, 10);
为获得更好的复杂性,您可以改用Set
(set.has
比arr.includes
更快):
function randoNumbers(min, max) {
const set = new Set();
for (let counter = 0; counter < 5; counter++) {
let num;
do {
num = Math.floor(Math.random() * (max - min) + min);
}
while (set.has(num))
set.add(num);
}
console.log([...set]);
}
randoNumbers(1, 10);
答案 1 :(得分:2)
有很多方法可以解决此问题。我正在贡献自己的解决方式。
function randoNumbers(min, max) {
let randomNumbers = [];
for (; randomNumbers.length < 5;) {
const value = Math.floor(Math.random() * (max - min) + +min);
if (!randomNumbers.includes(value))
randomNumbers.push(value);
}
console.log(randomNumbers);
}
randoNumbers(1, 10);