gpt4 book ai didi

javascript - 如何从数组中获得真正的随机数?或者我应该完全做点别的事情?

转载 作者:行者123 更新时间:2023-11-28 03:30:47 24 4
gpt4 key购买 nike

我想在用户每次单击提交按钮时显示不同的 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() 并不像您所猜测的那样真正随机,它是伪随机的,这意味着它在大量输入上存在某种模式。计算机本质上不能真正做到真正的随机性,因为它们总是必须获取一些数字,对其执行某种算法(这些通常是“梅森扭曲” - 有趣的维基百科阅读),然后吐出结果。/p>

也就是说,我不知道如何改进您在这里所做的事情。使用 PRNG,大量可能的输入可以提供很大帮助。如果您想要绝对真实的随机性,最简单的方法可能是连接 random.org 的 API(https://api.random.org/dashboard - 开发人员许可证是免费的,每天限制为 1000 个请求)。连接 API 可能比您计划的要多,但是 random.org 使用(如果我没记错的话)来自地球的大气噪声和气压来创建随机数,因此它尽可能接近真正的随机性可能得到。

希望这会有所帮助!

关于javascript - 如何从数组中获得真正的随机数?或者我应该完全做点别的事情?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58204055/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com