如何在不包含设定数字的情况下生成随机数?

时间:2018-08-12 02:11:40

标签: javascript

我只是想从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 个答案:

答案 0 :(得分:2)

仔细研究您实现的逻辑。您恰好遍历了9次循环(而不是8次),并且由于if...else控制流,每次迭代都有互斥的结果。

如果num等于currentvar(您应该通过从第二个分配中删除var来正确执行此操作),则重新分配,将其添加到数组中,一次都不要添加。这就是else的意思,并且您可能想让do...while循环分配num 直到,它不等于currentvar

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);

或者,如果您想保留if...else语句,则可以递减循环计数器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);