【问题标题】:Want to produce random numbers between 1-45 without repetition想要产生1-45之间的随机数而不重复
【发布时间】:2013-01-31 02:43:20
【问题描述】:

我遇到了一个非常奇怪的问题。我试图找到它的解决方案,但徒劳无功。我的问题是我想创建一个介于 1-45 之间的随机数,并且我不希望该数字再次重复。

【问题讨论】:

  • 拿一个。数组,用数字范围填充它,随机播放,弹出值
  • -1。不费力。没有放回的随机抽样根本不是什么奇怪的问题,在编程教科书里经常遇到,网上也有很多语言的解决方案,包括js。如果您搜索过“javascript random without replacement”,前三个结果来自 stackoverflow,第一个是 stackoverflow.com/questions/12987719/… 。另见stackoverflow.com/questions/11935175/…

标签: javascript titanium


【解决方案1】:

根据定义,随机选择将随机重复。

但是,您可以构建一个包含每个数字的数组,然后打乱该数组,生成随机的数字顺序而不重复。

var nums = [], i;
for( i=1; i<=45; i++) nums.push(i);
nums.sort(function(a,b) {return Math.random()-0.5;});
alert(nums.join(","));

【讨论】:

【解决方案2】:

这是工作代码..

Random rd =new Random();    
int n = rd.Next(1,45);

【讨论】:

  • >> new Random() ---- "'Random' 未定义"
  • 这必须是 JScript/.NET,而不是纯 JavaScript。
  • 哦,是的,我的错,javas 随机类有一个nextInt 方法,误认为是那个
【解决方案3】:

您真正想要的是在给定范围内创建一组数字并随机删除其中一个数字,直到该组为空。

这是一个生成另一个函数的函数:

function generateRandomRangeSet(beg, end) {
  var numbers = []; // Create an array in range [beg, end].
  for (var i=beg; i<=end; i++) { numbers.push(i); }
  return function() {
    if (numbers.length < 1) { throw new Error('no more numbers'); }
    var i=Math.floor(Math.random()*numbers.length), number=numbers[i];
    numbers.splice(i, 1); // Return and remove a random element of the array.
    return number;
  }
}

var r = generateRandomRangeSet(1, 45);
r(); // => 9
r(); // => 24
r(); // => 7 ... for each number [1, 45] then ...
r(); // Error: no more numbers

【讨论】:

  • 依赖于 Object.prototype 的新方法。上述代码在 IE8 及以下版本失败。
【解决方案4】:

这是有效的

function getRandomInt(min, max) {
    return Math.floor(Math.random() * (max - min)) + min;
}

【讨论】:

    猜你喜欢
    • 2013-01-02
    • 2013-12-21
    • 1970-01-01
    • 2011-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-12
    相关资源
    最近更新 更多