【问题标题】:Tried to get random number without repiatation and should start from 1 not 0试图在没有修复的情况下获得随机数,应该从 1 而不是 0 开始
【发布时间】:2022-12-05 22:47:57
【问题描述】:

我尝试获取随机数,它不应该在这里重复它的工作,但我添加它应该运行 MAX 5 TIMES 但它有时执行 3 、 4 、 5 次,这就是这段代码的实际问题。任何人都可以尝试并建议我最好的解决方案为了这。

var randomNum, already = new Object();
for (let i = 0; i <= 5; i++) {
  const randomNum = Math.floor(Math.random() * 8 + 1) ^ 0;
  if (!(randomNum in already)) {
    already[randomNum] = randomNum;
    console.log('Non repetitive number is', randomNum);
  }
}

【问题讨论】:

  • ^ 0 是怎么回事?
  • 递减i如果已经找到
  • 拜托,这与 nestjs 完全无关。请使用正确的标签。

标签: javascript node.js typescript


【解决方案1】:

您的代码存在一些问题。首先,您在 for 循环的开头创建了一个名为 randomNum 的新对象,它隐藏了您在代码顶部声明的 randomNum 变量。这意味着您在 for 循环中使用的 randomNum 变量与您用来检查数字是否已生成的 randomNum 变量不同。

其次,您的代码不能保证恰好生成 5 个非重复数字。如果至少生成了 5 个唯一数字,它只会生成最多 5 个数字。如果生成的唯一数字少于 5 个,您的代码将在到达 for 循环的第 5 次迭代之前停止。

要解决这些问题,您可以使用不同的方法来生成非重复数字。一种方法是生成从 1 到 8 的数字列表,打乱该列表,然后取打乱后列表的前 5 个元素。这将确保您始终准确获得 5 个唯一数字。

以下是如何实施此方法的示例:

// Generate a list of numbers from 1 to 8
const numbers = [1, 2, 3, 4, 5, 6, 7, 8];

// Shuffle the list of numbers
const shuffled = numbers.map(value => ({ value, sort: Math.random() }))
    .sort((a, b) => a.sort - b.sort)
    .map(({ value }) => value)

// Take the first 5 numbers from the shuffled list
const nonRepeatingNumbers = shuffled.slice(0, 5);

console.log('Non-repeating numbers:', nonRepeatingNumbers);

此代码每次运行时都会生成一个包含 1 到 8 的 5 个唯一数字的列表。您可以使用像 shuffle 这样的实用函数来打乱数字列表,或者您可以像本例中那样使用数组函数实现您自己的打乱。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 2017-08-27
    • 1970-01-01
    • 2022-11-24
    相关资源
    最近更新 更多