每当用户单击“提交”按钮时,我想显示一个不同的madlib。只需要单击3次。我正在使用下面的函数,但似乎并不是那么随机。我还有一个dogLib函数的代码片段,该函数创建三个madlib,然后调用其上方的函数以生成随机的madlib字符串。



//Class: madlibGenerator.js



//----- Private Helper Functions -----

//Get Random: word strings for randam madlib
//Get Random: madlib string to display
function getRandomString(array) {
  for(var i = array.length - 1; i>0; i--){
    var j = Math.floor(Math.random() * (i+1));
    var temp = array[i];
    array[i] = array[j];
    array[j] = temp;
  }
  return this.word = array.pop();
}


//Set: set user input word string arrays into the getRandomString(array)
//Get: a final array of words to add to the madLib display strings
function getFinalWordArray(){
  var prpN = getRandomString(this.properNouns);
  var adjt = getRandomString(this.adjectives);
  var noun = getRandomString(this.nouns);
  var vrb = getRandomString(this.verbs);

  return finalWordArray = [prpN, adjt, noun, vrb];
}


//Get Random Dog Lib
function getDogLib() {
  //Get Random Dog Words
  var dogWordsArray = getFinalWordArray();

  //DogLibs
  var dogLibOne =
      "What is that " + dogWordsArray[1] +
      " sound!" +
      " Hey! " + dogWordsArray[0] +
      "!  You come " + dogWordsArray[3] +
      " you crazy " + dogWordsArray[2] +
      "!";

  var dogLibTwo =
      dogWordsArray[0] + "!! " +
      dogWordsArray[0] + "!! " +
      "Come " + dogWordsArray[3] +
      " and lay on my clean " + dogWordsArray[2] +
      " while your treat is still " + dogWordsArray[1] + "!";

  var dogLibThree =
      "My human comes home and takes me for a " + dogWordsArray[3] +
      " where I sit on a " + dogWordsArray[2] +
      " and get my " + dogWordsArray[1] +
      " belly rubbed!";

  //Make array of DogLibs
  var dogLibArray = [dogLibOne, dogLibTwo, dogLibThree];

  //Pick random dogLib string to display
  finalDogLib = getRandomString(dogLibArray);
}

//Display: Random MadLib to console for now
function displayMadlib(pDisplayIDValue) {
  if(pDisplayIDValue == "dogLib"){
    //display
    getDogLib();
    console.log(finalDogLib);
  }else if(pDisplayIDValue == "loveLib"){
    //display
    getLoveLib();
    console.log(finalLoveLib);
  }else if(pDisplayIDValue == "funnyLib"){
    //display
    getFunnyLib();
    console.log(finalFunnyLib);
  }
}


上面的代码没有中断,只是没有产生真正的随机数。

//首选结果:每次用户单击“提交”按钮时,程序都会显示不同的madlib。用户只需单击3次按钮即可获得不同的madlib,第四次单击将清除表格并重新启动程序。

谢谢!

我乐于接受任何使它成为真正随机的madlibGenerator的想法。也许计算提交按钮的点击次数?

最佳答案

因此,真正的随机性将很难实现。 javascript库中的Math.Random()并不是真正的随机变量,它是伪随机的,这意味着在大量输入上有一种模式。计算机天生就不能真正做到真正的随机性,因为它们总是必须取一些数字,对它执行某种算法(这些通常是“ Mersenne Twisters”(有趣的Wikipedia阅读)),然后吐出结果。

就是说,我不知道该如何改善您在这里已经安装的内容。借助PRNG,大量可能的输入会有所帮助。如果您想要绝对真实的随机性,最简单的方法可能是挂接到random.org的API(https://api.random.org/dashboard-开发人员许可证是免费的,每天限制为1000个请求)。挂接一个API可能比您计划的要多,但是random.org使用(如果我没记错的话)来自地球的大气噪声和大气压力来创建它们的随机数,因此它尽可能接近真实的随机性。可能得到。

我希望这有帮助!

09-30 13:27
查看更多