Reputation: 572
A simple straight forward game user enters 6 numbers and clicks button play, if all 6 numbers are matched they win lottery, I have set up the loop so that it keeps generating a random numbers until the user wins, then informs them the number of loops it took to get to winning numbers. My problem with logic is that the loop terminates even if one number is matched I need it to keep running until all numbers are matched. Here is the code please help so that I can lean :)
<html>
<head>
<title>Lottery Game</title>
<SCRIPT LANGUAGE="javascript">
function genNums(){
var counter = 0;
do{
var num1 = Math.round(59 * Math.random())+1
var resultnum1 = document.lottery.Rball1.value = num1
var num2 = Math.round(59 * Math.random())+1
var resultnum2 =document.lottery.Rball2.value = num2
var num3 = Math.round(59 * Math.random())+1
var resultnum3 =document.lottery.Rball3.value = num3
var num4 = Math.round(59 * Math.random())+1
var resultnum4 =document.lottery.Rball4.value = num4
var num5 = Math.round(59 * Math.random())+1
var resultnum5 =document.lottery.Rball5.value = num5
var num6 = Math.round(59 * Math.random())+1
var resultnum6 =document.lottery.Rball6.value = num6
var enterednum1 = document.lottery.ball1.value;
var enterednum2 = document.lottery.ball2.value;
var enterednum3 = document.lottery.ball3.value;
var enterednum4 = document.lottery.ball4.value;
var enterednum5 = document.lottery.ball5.value;
var enterednum6 = document.lottery.ball6.value;
counter = counter + 1;
}while(resultnum1 != enterednum1 && resultnum2 != enterednum2 && resultnum3 != enterednum3 && resultnum4 != enterednum4 && resultnum5 != enterednum5 && resultnum6 != enterednum6)
//alert(counter);
if(resultnum1 == enterednum1 && resultnum2 == enterednum2 && resultnum2 == enterednum2 && resultnum2 == enterednum2 && resultnum2 == enterednum2 && resultnum2 == enterednum2){
alert("JackPot!, You Won The Lottery");
alert("It took " + counter + " number of loops to get wining numbers")
document.bgColor = "lightblue";
}
else{
alert("sorry you did not win" + counter);
}
}
</SCRIPT>
</head>
<body>
<Form Name = "lottery">
Lottery Game<br/>
Please enter your six numbers below:<br/>
Ball#1 <Input Type = "text" size = "1" value = "7" name = "ball1"><br/>
Ball#2 <Input Type = "text" size = "1" value = "45" name = "ball2"><br/>
Ball#3 <Input Type = "text" size = "1" value = "29" name = "ball3"><br/>
Ball#4 <Input Type = "text" size = "1" value = "10" name = "ball4"><br/>
Ball#5 <Input Type = "text" size = "1" value = "5" name = "ball5"><br/>
Ball#6 <Input Type = "text" size = "1" value = "25" name = "ball6"><br/>
<Input Type = "button" value = "Play" onClick = "genNums()"><br/>
Results:<br/>
Result Ball#1 <Input Type = "text" size = "1" name = "Rball1"><br/>
Result Ball#2 <Input Type = "text" size = "1" name = "Rball2"><br/>
Result Ball#3 <Input Type = "text" size = "1" name = "Rball3"><br/>
Result Ball#4 <Input Type = "text" size = "1" name = "Rball4"><br/>
Result Ball#5 <Input Type = "text" size = "1" name = "Rball5"><br/>
Result Ball#6 <Input Type = "text" size = "1" name = "Rball6"><br/>
</Form>
</body>
</html>
Upvotes: 1
Views: 4315
Reputation: 1
Sometimes reading the NOT logic gets a little hairy, especially with while clauses which depend on something being true to keep continuing
I try to keep things 'true' as often as possible for readability
} while( !(resultnum1 == enterednum1 && resultnum2 == enterednum2 && resultnum3 == enterednum3 &&
resultnum4 == enterednum4 && resultnum5 == enterednum5 && resultnum6 == enterednum6) )
edit: also, your if statement looks copied and pasted.. may want to fix the rest of the statement
if ( resultnum1 == enterednum1 && resultnum2 == enterednum2 && resultnum3 == enterednum3 && resultnum4 == enterednum4 && resultnum5 == enterednum5 && resultnum6 == enterednum6 ){
edit 2: Here's the code that worked for me. It works about 1 in 4 tries but only because I reduced the random maximum to 6
<html>
<head>
<title>Lottery Game</title>
<SCRIPT LANGUAGE="javascript">
function genNums(){
var counter = 0;
do{
var num1 = Math.round(5 * Math.random())+1
var resultnum1 = document.lottery.Rball1.value = num1
var num2 = Math.round(5 * Math.random())+1
var resultnum2 = document.lottery.Rball2.value = num2
var num3 = Math.round(5 * Math.random())+1
var resultnum3 = document.lottery.Rball3.value = num3
var num4 = Math.round(5 * Math.random())+1
var resultnum4 = document.lottery.Rball4.value = num4
var num5 = Math.round(5 * Math.random())+1
var resultnum5 = document.lottery.Rball5.value = num5
var num6 = Math.round(5 * Math.random())+1
var resultnum6 = document.lottery.Rball6.value = num6
var enterednum1 = document.lottery.ball1.value;
var enterednum2 = document.lottery.ball2.value;
var enterednum3 = document.lottery.ball3.value;
var enterednum4 = document.lottery.ball4.value;
var enterednum5 = document.lottery.ball5.value;
var enterednum6 = document.lottery.ball6.value;
counter = counter + 1;
}while( !((resultnum1 == enterednum1 && resultnum2 == enterednum2 && resultnum3 == enterednum3 && resultnum4 == enterednum4 && resultnum5 == enterednum5 && resultnum6 == enterednum6 ) || counter >= 10000 ) )
//alert(counter);
if( resultnum1 == enterednum1 && resultnum2 == enterednum2 && resultnum3 == enterednum3 && resultnum4 == enterednum4 && resultnum5 == enterednum5 && resultnum6 == enterednum6) {
alert("JackPot!, You Won The Lottery");
alert("It took " + counter + " number of loops to get winning numbers")
document.bgColor = "lightblue";
}
else{
alert("sorry you did not win after " + counter + " tries");
}
}
</SCRIPT>
</head>
<body>
<Form Name = "lottery">
Lottery Game<br/>
Please enter your six numbers below:<br/>
Ball#1 <Input Type = "text" size = "1" value = "1" name = "ball1"><br/>
Ball#2 <Input Type = "text" size = "1" value = "2" name = "ball2"><br/>
Ball#3 <Input Type = "text" size = "1" value = "3" name = "ball3"><br/>
Ball#4 <Input Type = "text" size = "1" value = "4" name = "ball4"><br/>
Ball#5 <Input Type = "text" size = "1" value = "5" name = "ball5"><br/>
Ball#6 <Input Type = "text" size = "1" value = "6" name = "ball6"><br/>
<Input Type = "button" value = "Play" onClick = "genNums()"><br/>
Results:<br/>
Result Ball#1 <Input Type = "text" size = "1" name = "Rball1"><br/>
Result Ball#2 <Input Type = "text" size = "1" name = "Rball2"><br/>
Result Ball#3 <Input Type = "text" size = "1" name = "Rball3"><br/>
Result Ball#4 <Input Type = "text" size = "1" name = "Rball4"><br/>
Result Ball#5 <Input Type = "text" size = "1" name = "Rball5"><br/>
Result Ball#6 <Input Type = "text" size = "1" name = "Rball6"><br/>
</Form>
</body>
</html>
Upvotes: 0
Reputation: 2558
You need to have OR condition in your while loop
while(resultnum1 != enterednum1 || resultnum2 != enterednum2 || resultnum3 != enterednum3 || resultnum4 != enterednum4 || resultnum5 != enterednum5 || resultnum6 != enterednum6)
This way, even if one set doesn't match, the code will loop again !!
And since you are using Math.random(), you are going to have a tough time to validate the logic as you may either need to predict Math.random() 's outcome are be lucky to win the great lottery :)
Upvotes: 3