Итерация случайного числа внутри цикла For - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь использовать For l oop, чтобы добавить случайное целое число (от 0-2) к переменной указанное количество раз. У меня проблема в том, что l oop не использует новое случайное число каждый раз, когда оно повторяется, поэтому я получаю 0, 9 или 18, только если передам 9, например.

Я ожидаю возврата объекта с ключами "a" и "b", имеющими разные числовые значения.

Вот мой метод получения случайных чисел:

function randomNumber(min, max){
   min = Math.ceil(0);
   max = Math.floor(3);
   return Math.floor(Math.random() * (max - min)) + min;
}

и вот функция где Я звоню randomNumber ():

function objMaker(cb, num){
  let obj = {
    a: 0,
    b: 0
  }
  for (var i = 0; i < num; i++) {
    obj.a += cb;
    obj.b += cb;
  }
  return obj;
}

objMaker(randomNumber(), 9)
// returns obj { a:0, b:0}
// or obj { a:9, b:9}
// or obj { a:18, b:18}

Я новичок, поэтому я ценю помощь, так как мне не удалось ничего найти по этому вопросу. Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 22 апреля 2020

Если вы используете 0 или 1 в качестве минимального значения, указывать это необязательно (достаточно указать только max). Приведенная ниже функция будет работать при условии, что максимальное значение равно 2

function randomNumber(max){
   return Math.round(Math.random() * max);
}

Надеюсь, это поможет.

0 голосов
/ 22 апреля 2020

Итак, вы сделали: вы передали результат randomNumber() первому параметру функции objMaker. Здесь я подчеркиваю «результат», потому что это означает, что ваш аргумент cb внутри функции randomNumber является числом, то есть он не изменяется внутри вашей функции.

function randomNumber(min, max){
   min = Math.ceil(0);
   max = Math.floor(3);
   return Math.floor(Math.random() * (max - min)) + min;
}

function objMaker(cb, num){
  console.log(cb); // notice that this is a number
  let obj = {
    a: 0,
    b: 0
  }
  for (var i = 0; i < num; i++) {

    // cb is both same since a number was passed (not a function)
    obj.a += cb; 
    obj.b += cb; // both cb here are identical, so a and b is the same at the end
  }
  return obj;
}

console.log(objMaker(randomNumber(), 9)) // randomNumber() here returns a random value

Честно говоря, я лично не понимаю, почему вы должны передавать функцию randomNumber в objMaker, но, предположив, что вам нужно, я думаю, лучший способ здесь - передать randomNumber функцию вместо результата randomNumber().

function randomNumber(min, max){
   min = Math.ceil(0);
   max = Math.floor(3);
   return Math.floor(Math.random() * (max - min)) + min;
}

function objMaker(cb, num){
  let obj = {
    a: 0,
    b: 0
  }
  for (var i = 0; i < num; i++) {
    obj.a += cb();
    obj.b += cb();
  }
  return obj;
}

console.log(objMaker(randomNumber, 9))

Или, в зависимости от вашего использования, вы можете иметь разные, но постоянные термины cb для a и b.

function randomNumber(min, max){
   min = Math.ceil(0);
   max = Math.floor(3);
   return Math.floor(Math.random() * (max - min)) + min;
}

function objMaker(cb, cb2, num){
  let obj = {
    a: 0,
    b: 0
  }
  for (var i = 0; i < num; i++) {
    obj.a += cb;
    obj.b += cb2;
  }
  return obj;
}

console.log(objMaker(randomNumber(), randomNumber(), 9))
0 голосов
/ 22 апреля 2020

Если я вас правильно понял, вы хотите генерировать новое случайное число в на каждой итерации из for l oop. Если дело обстоит так, то вам нужно на каждом итерации также вызывать ваш randomNumber():

function randomNumber() {
   const min = Math.ceil(0);
   const max = Math.floor(3);
   return Math.floor(Math.random() * (max - min)) + min;
}

function objMaker(num){
  let obj = {
    a: 0,
    b: 0
  }
  for (var i = 0; i < num; i++) {
    obj.a += randomNumber();
    obj.b += randomNumber();
  }
  return obj;
}

function test() {
  console.log(objMaker(9));
}
<button id=generate onclick='test()'>generate</button>

Если вы напишите objMaker(randomNumber(), 9), тогда он генерирует 0, 1 или 2 один раз, а затем передает его как cb в objMaker. Так что внутри for l oop он всегда добавляет одно и то же число 9 раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...