代码之家  ›  专栏  ›  技术社区  ›  Devmix

如何生成不包含集合数的随机数?[副本]

  •  1
  • Devmix  · 技术社区  · 6 年前

    我只是试着从1到25产生8个随机数。我的问题是我已经有了一个变量,它的值是14,我的问题是如何生成从1到25的随机数,如果其中一个等于14,那么用另一个随机数替换它?最后,我想在数组中有8个随机数,但我不想包含14个。有谁能告诉我我遗漏了什么,或者如何使这更准确?有时我的数组中只有7个元素,有人知道为什么吗?

    这是我的代码:

    var arr = [];
    var currentvar = 14;
    	for(var i = 0 ; i < 9; i++){
    		var num = Math.floor(Math.random()*25) + 1;
    		if(num === currentvar){
    		   num = Math.floor(Math.random()*25) + 1;
    		}else{
    		  arr.push(num);
    		}
    	}
    
    	console.log(arr);
    1 回复  |  直到 6 年前
        1
  •  2
  •   Patrick Roberts Benjamin Gruenbaum    6 年前

    仔细研究你已经实现的逻辑。循环正好经过9次(而不是8次),并且由于 if...else 控制流量。

    你重新分配 num 如果它等于 currentvar (您应该通过移除 var 将它添加到数组中,而不是在一次迭代中同时添加。那就是 else do...while 要分配的循环 号码 它不等于 .

    var arr = [];
    var currentvar = 14;
    var num;
    
    for (var i = 0; i < 8; i++) {
      do {
        num = Math.floor(Math.random() * 25) + 1;
      } while (num === currentvar);
    
      arr.push(num);
    }
    
    console.log(arr);

    或者,如果你想 如果…否则 语句,可以减小循环计数器 i 相反,当 num === currentvar

    var arr = [];
    var currentvar = 14;
    
    for (var i = 0; i < 8; i++) {
      var num = Math.floor(Math.random() * 25) + 1;
    
      if (num === currentvar) {
        i--;
      } else {
        arr.push(num);
      }
    }
    
    console.log(arr);