每当用户单击“提交”按钮时,我想显示一个不同的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使用(如果我没记错的话)来自地球的大气噪声和大气压力来创建它们的随机数,因此它尽可能接近真实的随机性。可能得到。
我希望这有帮助!