使用 random() 时如何确保没有重复数字?
How do I make sure there are no repeated numbers when using random()?
我有这段代码显示 100 个随机数,然后为每 10 个数字添加一个中断。我如何确保这 100 个随机数没有重复?我知道也许与更多 if 语句有关?
谢谢,
J
<!DOCTYPE html>
<html>
<h1><font color = "blue">Random Numbers and Breaks (for loops)</font></h1>
<p><font color="red">This will display 100 numbers and insert a break in 10-number intervals:</font></p>
<div id="demo"> </div>
<body>
<script>
var text= '';
var i = 0;
var counter = 0;
for (; i < 100; i++ , counter++) {
var numbers = Math.floor((Math.random() * 100) + 1);
text += numbers + " " + "<br>";
if (i % 10 === 9) {
text += "<br>";
}
}
document.getElementById("demo").innerHTML = text;
</script>
</body>
</html>
How would I ensure that these 100 random numbers do not have repeats?
您需要保存返回值(通过随机数生成器),以免再次返回相同的值。
function randomNumberGenerator( min, max )
{
var returnedValues = [];
return function()
{
var num = null;
while( num == null || returnedValues.indexOf( num ) != -1 )
{
num = Math.floor((Math.random() * (max-min)) + min);
}
return num;
}
}
现在您可以调用此 n
次 ( n < (max - min) )
var nRandomNumbers = 10;
var randomNumArr = [];
var ran1 = randomNumberGenerator(1,100); //initialize the randomNumberGenerator
for( var counter = 0; counter < nRandomNumbers; counter++ )
{
randomNumArr.push( ran1() );
}
我想这就是你想要的,如果你不知道它是做什么的,请研究它。不要简单的复制粘贴。
var text= '';
var i = 0;
var counter = 0;
var nums = []; // Created array
var numbers;
for (; i < 100; i++ , counter++) {
numbers = Math.floor((Math.random() * 100) + 1);
while (nums.includes(numbers))
numbers = Math.floor((Math.random() * 100) + 1);
// While nums array includes numbers, reroll.
nums.push(numbers); // Push the number to the array
text += numbers + " " + "<br>";
if (i % 10 === 9) text += "<br>"
// If the rightmost digit is a 9, add the br tag
}
document.getElementById("demo").innerHTML = text;
<!DOCTYPE html>
<html>
<h1><font color = "blue">Random Numbers and Breaks (for loops)</font></h1>
<p><font color="red">This will display 100 numbers and insert a break in 10-number intervals:</font></p>
<div id="demo"> </div>
<body>
</body>
</html>
您可以使用 Fischer yates 算法对数组进行洗牌并将数组从 1 洗牌到 100。
// Returns num size random array from 1 to num
function getRandomArray(num) {
const arr = [];
for (let i = 0; i < num; i++) {
arr.push(i+1);
}
let temp, rIndex;
// swap random element
for (i = num - 1; i >= 0; i--) {
rIndex = Math.floor(Math.random()*i);
temp = arr[i];
arr[i] = arr[rIndex];
arr[rIndex] = temp;
}
return arr;
}
let text = '';
getRandomArray(100).forEach(function(item, index){
text += item + " <br />";
text += (index + 1)%10 === 0 ? "<br />" : "";
});
document.getElementById("demo").innerHTML = text;
我有这段代码显示 100 个随机数,然后为每 10 个数字添加一个中断。我如何确保这 100 个随机数没有重复?我知道也许与更多 if 语句有关?
谢谢, J
<!DOCTYPE html>
<html>
<h1><font color = "blue">Random Numbers and Breaks (for loops)</font></h1>
<p><font color="red">This will display 100 numbers and insert a break in 10-number intervals:</font></p>
<div id="demo"> </div>
<body>
<script>
var text= '';
var i = 0;
var counter = 0;
for (; i < 100; i++ , counter++) {
var numbers = Math.floor((Math.random() * 100) + 1);
text += numbers + " " + "<br>";
if (i % 10 === 9) {
text += "<br>";
}
}
document.getElementById("demo").innerHTML = text;
</script>
</body>
</html>
How would I ensure that these 100 random numbers do not have repeats?
您需要保存返回值(通过随机数生成器),以免再次返回相同的值。
function randomNumberGenerator( min, max )
{
var returnedValues = [];
return function()
{
var num = null;
while( num == null || returnedValues.indexOf( num ) != -1 )
{
num = Math.floor((Math.random() * (max-min)) + min);
}
return num;
}
}
现在您可以调用此 n
次 ( n < (max - min) )
var nRandomNumbers = 10;
var randomNumArr = [];
var ran1 = randomNumberGenerator(1,100); //initialize the randomNumberGenerator
for( var counter = 0; counter < nRandomNumbers; counter++ )
{
randomNumArr.push( ran1() );
}
我想这就是你想要的,如果你不知道它是做什么的,请研究它。不要简单的复制粘贴。
var text= '';
var i = 0;
var counter = 0;
var nums = []; // Created array
var numbers;
for (; i < 100; i++ , counter++) {
numbers = Math.floor((Math.random() * 100) + 1);
while (nums.includes(numbers))
numbers = Math.floor((Math.random() * 100) + 1);
// While nums array includes numbers, reroll.
nums.push(numbers); // Push the number to the array
text += numbers + " " + "<br>";
if (i % 10 === 9) text += "<br>"
// If the rightmost digit is a 9, add the br tag
}
document.getElementById("demo").innerHTML = text;
<!DOCTYPE html>
<html>
<h1><font color = "blue">Random Numbers and Breaks (for loops)</font></h1>
<p><font color="red">This will display 100 numbers and insert a break in 10-number intervals:</font></p>
<div id="demo"> </div>
<body>
</body>
</html>
您可以使用 Fischer yates 算法对数组进行洗牌并将数组从 1 洗牌到 100。
// Returns num size random array from 1 to num
function getRandomArray(num) {
const arr = [];
for (let i = 0; i < num; i++) {
arr.push(i+1);
}
let temp, rIndex;
// swap random element
for (i = num - 1; i >= 0; i--) {
rIndex = Math.floor(Math.random()*i);
temp = arr[i];
arr[i] = arr[rIndex];
arr[rIndex] = temp;
}
return arr;
}
let text = '';
getRandomArray(100).forEach(function(item, index){
text += item + " <br />";
text += (index + 1)%10 === 0 ? "<br />" : "";
});
document.getElementById("demo").innerHTML = text;