首页 > 解决方案 > How to generate random numbers without including a set number?

问题描述

I'm just trying to generate 8 random numbers from 1 to 25. My issue is that I already have a variable and its value is 14, with that being said my question is how to generate random numbers from 1 to 25 and if one them is equal to 14 then replace it with another random number? at the end, I want to have 8 random numbers in my array and I don't want to include 14 in it. Can anyone tell me what I'm missing or how to make this more accurate? and sometimes I only end up with 7 elements in my array, does anyone knows why?

Here's my code:

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

标签: javascript

解决方案


更仔细地研究你已经实现的逻辑。if...else您恰好通过循环 9 次(不是 8 次),并且由于控制流,每次迭代都有互斥的结果。

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


推荐阅读