Javascript 如何不让两个连续的相同数字出现在数学中。random()
我正在做一个报价显示网站从youtube学习。我对一个问题很好奇。当我按下按钮时,它会出现两次或两次以上相同的引号,但有时并不总是(我使用Math.random()所以通常可以)。我希望当我按下按钮,它会改变,而不是停留在同一报价 我不知道,所以我什么也没做Javascript 如何不让两个连续的相同数字出现在数学中。random(),javascript,algorithm,Javascript,Algorithm,我正在做一个报价显示网站从youtube学习。我对一个问题很好奇。当我按下按钮时,它会出现两次或两次以上相同的引号,但有时并不总是(我使用Math.random()所以通常可以)。我希望当我按下按钮,它会改变,而不是停留在同一报价 我不知道,所以我什么也没做 const quotes = [ { author: 'Ramiz Karaeski', quote: 'Meyvayı soymadan içinden ne çıkacak bilemem, ka
const quotes = [
{
author: 'Ramiz Karaeski',
quote: 'Meyvayı soymadan içinden ne çıkacak bilemem, kardeş.'
},
{
author: 'Franz Kafka',
quote: 'Beyinlerimiz savaşsın isterdim ama görüyorum ki silahsınız bayım.'
},
{
author: 'Fyodor Dostoyevski',
quote: 'Cehennem nedir? Sevginin artık imkansız olduğuna dair çekilen bir acıdır.'
},
{
author: 'Lev Tolstoy',
quote: 'Herkes dünyayı değiştirmeyi düşünür, ama kimse kendini değiştirmeyi düşünmez.'
},
{
author: 'Charles Bukowski',
quote: 'İnsan her zaman ihanet eder sonunda. Kimseye güvenme.'
},
{
author: 'Friedrich Nietzsche',
quote: 'Oysa güzelliğin sesi kısıktır konuşurken; sadece en uyanık ruhlara yanaşır.'
},
{
author: 'Sabahattin Ali',
quote: 'On beş günlük ömrü on beş seneye sığdıramazsın da, on beş senelik ömrü on beş günde yaşayıverirsin!'
}
]
const quoteAuthor = document.getElementById('author');
const displayQuote = document.getElementById('quote');
const buttonChange = document.getElementById('button-change-quote');
buttonChange.addEventListener('click', change);
let random = 0;
change();
function change() {
random = Math.floor(Math.random() * quotes.length);
quoteAuthor.innerHTML = quotes[random].author;
displayQuote.innerHTML = quotes[random].quote;
}
您需要使用
do while
循环,不断生成一个新的随机数,直到它与以前的相同为止
let random = 0;
change();
function change() {
let newRandom;
do{
newRandom = Math.floor(Math.random() * quotes.length);
}
while(newRandom === random)
random = newRandom
quoteAuthor.innerHTML = quotes[random].author;
displayQuote.innerHTML = quotes[random].quote;
}
您需要跟踪当前/旧的随机数,然后将其与新的随机数进行比较,并不断生成新的随机数,直到获得新的随机数,如下所示:
let random = 0;
let lastRandom = null;
function change() {
do {
random = Math.floor(Math.random() * quotes.length);
} while(random === lastRandom);
lastRandom = random;
quoteAuthor.innerHTML = quotes[random].author;
displayQuote.innerHTML = quotes[random].quote;
}
另一种方法可以是这样的 它将调用change();如果随机数与旧随机数相同
<script>
const quotes = [
{
author: 'Ramiz Karaeski',
quote: 'Meyvayı soymadan içinden ne çıkacak bilemem, kardeş.'
},
{
author: 'Franz Kafka',
quote: 'Beyinlerimiz savaşsın isterdim ama görüyorum ki silahsınız bayım.'
},
{
author: 'Fyodor Dostoyevski',
quote: 'Cehennem nedir? Sevginin artık imkansız olduğuna dair çekilen bir acıdır.'
},
{
author: 'Lev Tolstoy',
quote: 'Herkes dünyayı değiştirmeyi düşünür, ama kimse kendini değiştirmeyi düşünmez.'
},
{
author: 'Charles Bukowski',
quote: 'İnsan her zaman ihanet eder sonunda. Kimseye güvenme.'
},
{
author: 'Friedrich Nietzsche',
quote: 'Oysa güzelliğin sesi kısıktır konuşurken; sadece en uyanık ruhlara yanaşır.'
},
{
author: 'Sabahattin Ali',
quote: 'On beş günlük ömrü on beş seneye sığdıramazsın da, on beş senelik ömrü on beş günde yaşayıverirsin!'
}
]
const quoteAuthor = document.getElementById('author');
const displayQuote = document.getElementById('quote');
const buttonChange = document.getElementById('button-change-quote');
buttonChange.addEventListener('click', change);
let random = 0;
change();
function change() {
var new_index = Math.floor(Math.random() * quotes.length);
if(new_index==random){
change();
return;
}else{
random=new_index;
}
quoteAuthor.innerHTML = quotes[random].author;
displayQuote.innerHTML = quotes[random].quote;
}
</script>
常量引号=[
{
作者:“Ramiz Karaeski”,
引述:“卡德雷,梅瓦伊·索伊马丹·伊因登·内卡卡·比勒姆。”
},
{
作者:《弗兰兹·卡夫卡》,
引语:“BeyinErimiz savaşsın isterdim ama görüyorum ki silahsınız bayım.”
},
{
作者:'Fyodor Dostoyevski',
引述:“塞赫内姆·内迪尔?塞维吉尼·阿特·伊姆坎斯·奥杜乌纳·代尔凯伦·比尔·阿卡迪尔”
},
{
作者:《列夫·托尔斯泰》,
引述:“埃尔克斯·德尼亚伊·蒂尔梅伊·迪努尔,阿玛·金泽·肯迪尼·德尼亚伊·蒂尔梅伊·迪努梅兹。”
},
{
作者:《查尔斯·布可夫斯基》,
引述:“我要给她一个扎曼·伊哈内特·埃德尔·索南达,金赛·güvenme。”
},
{
作者:“弗里德里希·尼采”,
引述:“Oysa güzelliğin sesi kısıktır konuşurken;sadece en uyanık ruhlara yanaţr.”
},
{
作者:《萨巴哈廷阿里》,
引述:“在贝南尔克先生在贝塞内伊·sıdıdıramazsın da,在贝塞内利克先生在贝塞内尔克先生在维瑞森!”
}
]
const quoteAuthor=document.getElementById('author');
const displayQuote=document.getElementById('quote');
const buttonChange=document.getElementById('button-change-quote');
buttonChange.addEventListener('单击',更改);
设random=0;
改变();
函数更改(){
var new_index=Math.floor(Math.random()*quotes.length);
如果(新索引==随机){
改变();
返回;
}否则{
随机=新的指数;
}
quoteAuthor.innerHTML=quotes[random]。作者;
displayQuote.innerHTML=quotes[random]。quote;
}
在代码中引入另一个变量
let random = 0;
let last_random = 0;
change();
function change() {
random = Math.floor(Math.random() * quotes.length);
if(random != last_random){
last_random = random;
quoteAuthor.innerHTML = quotes[random].author;
displayQuote.innerHTML = quotes[random].quote;
}else{
change();
}
}
我自己也不太喜欢使用循环。“不断尝试直到成功”的想法对我个人来说有点不雅观 我可以使用的另一种方法是从数组中删除以前选择的项,并将其存储在变量(
prev
)中。然后,从其余选项中选择随机项目
const quotes=[{作者:拉米兹·卡拉斯基,引述:'Meyvayısoymadan içinden neıkak bilemem,kardeş。},{作者:弗兰兹·卡夫卡,引述:'Beyinerimiz savaşsın isterdim ama görüyorum ki silahsınız bay m},{作者:'Fyodor Dostoyevski',引用:'Cehennem nedir?Sevginin artık imkansız olduğdairçekilen bir acıdır.},{作者:'Lev Tolstoy',引用:'Herkes dünyayıdeğiğiştirmeyişdünür,ama kimse kendini değiştirmeyişdşnmez nez.'作者:'s:'Charles Bukowan zameyi deşKimmeyişseyşseyşsey',{作者:'Friedrich Nietzsche',引用:'Oysa güzelliğin sesi kısıktır konuşurken;sadece en uyanık ruhlara yanaţr.},{作者:'Sabahattin Ali',引用:'On beşgünl kömr On beţseneye sţdţramazsţda,On beţsenelionţveryinţde!';
设random=0;
函数更改(){
让prev=quotes.splice(random,1)[0];//从选项中删除以前的选择
random=Math.floor(Math.random()*quotes.length);
//quoteAuthor.innerHTML=quotes[random]。作者;
//displayQuote.innerHTML=quotes[random]。quote;
log(`“${quotes[random].quote}”-${quotes[random].author}`);
quotes.push(prev);//将上一个选择添加回
}
//演示
对于(让i=0;i有一个更好的方法:有一个额外的变量来保存上一个引号。随机选择一个新的。然后交换这两个,这样新选择的引号现在就从选择列表中删除了
const chosen = quotes.splice(random,1)[0]
function change() {
new_choice = Math.floor(Math.random() * quotes.length);
// display quotes[new_choice]
// Swap the "disabled" quote back into the list, removing the one just chosen.
temp = chosen
chosen = quotes[new_choice]
quotes[new_choice] = temp
}
只需从其他可能性中选择:
let random = Math.floor(Math.random() * quotes.length);
change();
function change() {
let previous = random;
random = Math.floor(Math.random() * (quotes.length-1));
if (random >= previous) {
random+=1;
}
quoteAuthor.innerHTML = quotes[random].author;
displayQuote.innerHTML = quotes[random].quote;
}
将调用放在Math.random()上
在while
循环中,继续尝试,直到得到另一个。另一种方法是临时删除所选元素,并在选择新元素后将其添加回。使用随机数,而不是选择,但与上一个选择的距离减少了一。这样您就不需要这样做l丢弃随机数。@aligur请加上它作为答案。它简单而优雅。这项任务主要是通过先正确地排列数组并逐个消耗物品来完成的。