Создайте функцию, которая возвращает уникальные случайные числа и присваивает это число отдельной переменной. - PullRequest
0 голосов
/ 13 октября 2019

Я только начал программировать и столкнулся с этой проблемой. Ответы, опубликованные на форуме, не очень помогают мне, так что вот мой вопрос. Я пытаюсь создать функцию, которая генерирует четыре случайных числа между 1-12. После того как числа сгенерированы, они присваиваются отдельной переменной.

var gem1;
var gem2;
var gem3;
var gem4;

function updateGem() {
    gem1 = Math.floor(Math.random() * 12 + 1);
    gem2 = Math.floor(Math.random() * 12 + 1);
    gem3 = Math.floor(Math.random() * 12 + 1);
    gem4 = Math.floor(Math.random() * 12 + 1);
}

Как видите, иногда сгенерированные числа совпадают, а это не то, что мне нужно. Мне нужно, чтобы каждая переменная имела свой уникальный номер.

The value of gem 1 is 8
The value of gem 2 is 9
The value of gem 3 is 9
The value of gem 4 is 8

Ответы [ 4 ]

2 голосов
/ 13 октября 2019

Вы можете сделать что-то вроде этого:

function generateRandomUnique(size) {
  const unique = new Set();
  while (unique.size < size)  {
    unique.add(Math.floor(Math.random() * 12 + 1));
  }
  return [...unique];
}

const [gem1, gem2, gem3, gem4] = generateRandomUnique(4);
console.log(gem1, gem2, gem3, gem4);
0 голосов
/ 13 октября 2019

Генерация случайного числа на основе длины массива. Поменяйте местами с последним индексом и теперь снова генерируйте число, основанное на уменьшении длины массива на 1.

var numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
var count = numbers.length;
function updateGem() {

    gem1 = getRandomNumber();
    gem2 = getRandomNumber();
    gem3 = getRandomNumber();
    gem4 = getRandomNumber();

    console.log(gem1, gem2, gem3, gem4);

}
function getRandomNumber() {

    if (count <= 0) {
        count = numbers.length;
    }
    var randomIndex = Math.round(count * Math.random());
    console.log("Random Number="+randomIndex);
    var temp = numbers[randomIndex]; 
    numbers[randomIndex] = numbers[count-1];
    numbers[count-1] = temp;
    count--; // next time do not generate this random number
    return temp;
}
0 голосов
/ 13 октября 2019

Вот что я сделал, чтобы решить проблему:

function updateGem() {
    var numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
    numbers.sort(() => {
        return 0.5 - Math.random();
    });

    gem1 = numbers[0];
    gem2 = numbers[1];
    gem3 = numbers[2];
    gem4 = numbers[3];

}
0 голосов
/ 13 октября 2019

Сохранить переменные в массиве и проверить число в массиве

var gem1;
var gem2;
var gem3;
var gem4;
var arr=[];
function updateGem() {
arr=[];
    gem1 = Math.floor(Math.random() * 12 + 1);
    if(arr.includes(gem1))
    updateGem();
    else
    arr.push(gem1);
    gem2 = Math.floor(Math.random() * 12 + 1);
    if(arr.includes(gem2))
    updateGem();
    else
    arr.push(gem2);
    gem3 = Math.floor(Math.random() * 12 + 1);
    if(arr.includes(gem3))
    updateGem();
    else
    arr.push(gem3);
    gem4 = Math.floor(Math.random() * 12 + 1);
    if(arr.includes(gem4))
    updateGem();
    else
    arr.push(gem4);
    
}
updateGem()
console.log(gem1)
console.log(gem2)
console.log(gem3)
console.log(gem4)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...