Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

Sideonecincy

macrumors 6502
Original poster
Sep 29, 2003
421
0
I am writing code for a quote randomizer. I am currently having problems because I do not want the quotes to repeat and I do not know where my mistake is.

The quotes are generating but some of them are repeating. There is also an option for someone to add a new quote to the list.

Here is the code:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>

<head>
<title>Matthew Daly's JavaScript Page</title>
<script type="text/javascript">
<!--
//-->
</script>
<link rel="stylesheet" type="text/css" href="csjsmain.css" />
</head>

<body>
<div class="header">
<h1>Matthew Daly's Lab 2 Subbmission!</h1>
</div>
<div class="body">

<span id="quoteText"> </span><br/><br/>
<button id="getQuote">Get a Quote</button>
<button id="newQuote" onclick="addQuote()">Add Your Own</button>

<script type="text/javascript">

var arrQuotes = new Array();

arrQuotes[0] = "Programming is an art form that fights back.";
arrQuotes[1] = "One time I thought I was a variable. But then I changed my mind. ";
arrQuotes[2] = "Of course I want some Cheesy Poofs.";
arrQuotes[3] = "No one suspects the butterfly!!!!";
arrQuotes[4] = "what does it mean when a young, lithe, and sassy girl tells you that she wants to 'have your baby'? i have no babies..";
arrQuotes[5] = "Beware of bugs in the above code; I have only proved it correct, not tried it.";
arrQuotes[6] = "Chicken meat tastes better cooked.";
arrQuotes[7] = "Is that really supposed to go there?";
arrQuotes[8] = "Any sufficiently technologically advanced music is indistinguishable from line noise.";

var intQuoteIndex = -1;
// assign the event handler function
document.getElementById("getQuote").onclick = nextQuote;

function random()
{
var qDex = Math.floor(Math.random() * arrQuotes.length);
return qDex;
}

// function to generate a new random quote.
function nextQuote()
{
// keep track of the current quote index.
// use a while loop to generate a new index
// that is different from the current one
// assign the new quote[index] text to the
// quote display element

// Assign the new quote content to the innerHTML
var intTemp = random();
while(intTemp != intQuoteIndex)
{
document.getElementById("quoteText").innerHTML = arrQuotes[intTemp];
intQuoteIndex = intTemp;
}

}
function addQuote()
{
// Adding an additional element to an array:
var strQuote = window.prompt("Please eneter your quote:","Quote");
arrQuotes[arrQuotes.length] = strQuote;
}
</script>

</div>
<div class="footer">
<hr/>
© Matthew Daly
</div>
</body>

</html>
 
Well you're using random, so of course things can repeat. That's why it's random. One solution would be to display quotes as they appear in the order they are in the array, then shuffle the quote array after it reaches the end and start from the beginning again. This still leaves a possibility that the last quote would become the first quote after shuffling, but you could also do a check for this. This should get you started. I don't have time to code it up currently.

Also, for the code,
Code:
while(intTemp != intQuoteIndex)
{
document.getElementById("quoteText").innerHTML = arrQuotes[intTemp];
intQuoteIndex = intTemp;
}
The while loop will only ever run once through because you set those two variables equal to one another.
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.