Mini lotto

I’m doing an exercise that’s a mini lotto program. The idea is to:

-use a for loop that iterates through the winningNumbers array and compares the customer number to each number there.

  • I need to use a boolean match variable to flag if a match has been found.
  • And a compound && condition that allows the loop to continue to iterate only if a match is not found and the end of the array has not been reached.
  • An if statement nested inside the for loop which checks the customer number agains each winning number in the array, each time the loop iterates, and sets the boolean, match, to true if a match is found.

I’d like just to check the for loop with the if and how to write the !match. Do I need a second for loop after the if so the !match goes there? Thanks!

var customerNumbers = 12;
var winningNumbers = [];
    winningNumbers.push(12,17,24,37,38,43);
var match = false;
var i = 0;

for (var i = 0; i < winningNumbers.length && !match; i++){

    if (customerNumbers == winningNumbers[i++])
        {
        match = true;

        document.write("<h4>This Week's Winning Numbers are:</h4>");
        document.write("<p>");
        document.write(winningNumbers.join(" , "));
        document.write("</p>");
        document.write("<h4>The Customer's Number is:</h4>");
        document.write("<p>");
        document.write(customerNumbers);
        document.write("</p>");
        document.write("<h4>We have a match and a winner!</h4>");
        }
        else
        {
        document.write("<h4>This Week's Winning Numbers are:</h4>");
        document.write("<p>");
        document.write(winningNumbers.join(" , "));
        document.write("</p>");
        document.write("<h4>The Customer's Number is:</h4>");
        document.write("<p>");
        document.write("13");
        document.write("</p>");
        document.write("<h4>Sorry you are not a winner this week</h4>");
        }
}

This part of the if conditions needs to be changed.
winningNumbers[i++]

The i variable is already being increased by the for loop. If you increase it elsewhere within the loop then you’re going to end up skipping over some index numbers, which is a bad thing.
Change it to winningNumbers[i] and you will then be correctly checking that part of the array.

Next - the document.write parts don’t need to be in the for loop. Move them down below the for loop and put them within their own separate if (match) { clause.

Then there are a whole range of tidy-ups that can be done, such as not declaring the i variable in the for loop, as you already have it declared earlier on, but that and other issues can wait until you feel brave enough to run your code through jslint.com

Here’s a previous step.

Now enable your program to search the array of winning numbers to check if a customer number is a winner or not. To do this, you will need to compare the customer number to each of the six winning number to see if there is a match. Use (a) an if statement with a series of conditions linked by compound OR operators (b) a boolean variable called match, which is set to a value of true if the customer’s number matches one of the winning numbers.
If a match is found, write a message 1. If not write message 2.

The variable and array come from the previous exercise. The code is not working. Also is there a way to write with the methods I’m using, but without repeating parts of the code to create DOM elements and attach them to the page? Just adding different set of content depending on the situation.



/* Create variable and array */

var customerNumbers = 12;
var winningNumbers = [];
    winningNumbers.push(12, 17, 24, 37, 38, 43);
var match = false;

/* Conditional with OR */

if (customerNumbers == winningNumbers[0] ||
    customerNumbers == winningNumbers[1] ||
    customerNumbers == winningNumbers[2] ||
    customerNumbers == winningNumbers[3] ||
    customerNumbers == winningNumbers[4] ||
    customerNumbers == winningNumbers[5])
    {
    match = true;

    /* Create DOM elements */

    var newHeadingWinningNumbers = document.createElement("h3");
    var newParagraphWinningNumbers = document.createElement("p");
    var newHeadingCustomerNumbers = document.createElement("h3");
    var newParagraphCustomerNumbers = document.createElement("p");
    var newHeadingCommentary = document.createElement("h3");

    /* Add content with innerHTML */

    newHeadingWinningNumbers.innerHTML = "This Week's Winning Numbers are: ";
    newParagraphWinningNumbers.innerHTML = winningNumbers.join(", ");
    newHeadingCustomerNumbers.innerHTML = "The Customer's Number is: ";
    newParagraphCustomerNumbers.innerHTML = customerNumbers;
    newHeadingCommentary.innerHTML = "We have a match and a winner!"

    /* Append elements to page */

    document.getElementById("lotto-results").appendChild(newHeadingWinningNumbers);
    document.getElementById("lotto-results").appendChild(newParagraphWinningNumbers);
    document.getElementById("lotto-results").appendChild(newHeadingCustomerNumbers);
    document.getElementById("lotto-results").appendChild(newParagraphCustomerNumbers);
    document.getElementByID("lotto-results").appendChild(newHeadingCommentary);

    } else {

    /* Create DOM elements */

    var newHeadingWinningNumbers = document.createElement("h3");
    var newParagraphWinningNumbers = document.createElement("p");
    var newHeadingCustomerNumbers = document.createElement("h3");
    var newParagraphCustomerNumbers = document.createElement("p");
    var newHeadingCommentary = document.createElement("h3");

    /* Add content with innerHTML */

    newHeadingWinningNumbers.innerHTML = "This Week's Winning Numbers are: ";
    newParagraphWinningNumbers.innerHTML = winningNumbers.join(", ");
    newHeadingCustomerNumbers.innerHTML = "The Customer's Number is: ";
    newParagraphCustomerNumbers.innerHTML = "13";
    newHeadingCommentary.innerHTML = "Sorry you are not a winner this week."

    /* Append elements to page */

    document.getElementById("lotto-results").appendChild(newHeadingWinningNumbers);
    document.getElementById("lotto-results").appendChild(newParagraphWinningNumbers);
    document.getElementById("lotto-results").appendChild(newHeadingCustomerNumbers);
    document.getElementById("lotto-results").appendChild(newParagraphCustomerNumbers);
    document.getElementByID("lotto-results").appendChild(newHeadingCommentary);
    }


Thanks!

How about this?


/* Create variable and array */

var customerNumbers = 12;
var winningNumbers = [];
    winningNumbers.push(12, 17, 24, 37, 38, 43);
var match = false;

/* Create DOM elements */

var newHeadingWinningNumbers = document.createElement("h3");
var newParagraphWinningNumbers = document.createElement("p");
var newHeadingCustomerNumbers = document.createElement("h3");
var newParagraphCustomerNumbers = document.createElement("p");
var newHeadingCommentary = document.createElement("h3");

/* Append elements to page */

document.getElementById("lotto-results").appendChild(newHeadingWinningNumbers);
document.getElementById("lotto-results").appendChild(newParagraphWinningNumbers);
document.getElementById("lotto-results").appendChild(newHeadingCustomerNumbers);
document.getElementById("lotto-results").appendChild(newParagraphCustomerNumbers);
document.getElementById("lotto-results").appendChild(newHeadingCommentary);

/* Loops */

for (i = 0; i < winningNumbers.length && !match; i++){

    if (customerNumbers == winningNumbers[i]){

        match = true
    }
}

        if (match) {

             /* Add content with innerHTML */

            newHeadingWinningNumbers.innerHTML = "This Week's Winning Numbers are: ";
            newParagraphWinningNumbers.innerHTML = winningNumbers.join(", ");
            newHeadingCustomerNumbers.innerHTML = "The Customer's Number is: ";
            newParagraphCustomerNumbers.innerHTML = customerNumbers;
            newHeadingCommentary.innerHTML = "We have a match and a winner!";
        }

        else {

            /* Add content with innerHTML */

            newHeadingWinningNumbers.innerHTML = "This Week's Winning Numbers are: ";
            newParagraphWinningNumbers.innerHTML = winningNumbers.join(", ");
            newHeadingCustomerNumbers.innerHTML = "The Customer's Number is: ";
            newParagraphCustomerNumbers.innerHTML = customerNumbers;
            newHeadingCommentary.innerHTML = "Sorry you are not a winner this week.";

        }





The same but now the loop goes in a function. Here I don’t know if variables should be local or global. Comments welcome. At the moment it prints The second message, although there is a winner there. As if it’s not grabbing the variables correctly.


var customerNumbers = 12;
var winningNumbers = [];
    winningNumbers.push(12, 17, 24, 37, 38, 43);
var match = false;

/* Create DOM elements */ 

var newHeadingWinningNumbers = document.createElement("h3");
var newParagraphWinningNumbers = document.createElement("p");
var newHeadingCustomerNumbers = document.createElement("h3");
var newParagraphCustomerNumbers = document.createElement("p");
var newHeadingCommentary = document.createElement("h3");

/* Append DOM elements to page */ 

document.getElementById("lotto-results").appendChild(newHeadingWinningNumbers);
document.getElementById("lotto-results").appendChild(newParagraphWinningNumbers);
document.getElementById("lotto-results").appendChild(newHeadingCustomerNumbers);
document.getElementById("lotto-results").appendChild(newParagraphCustomerNumbers);
document.getElementById("lotto-results").appendChild(newHeadingCommentary); 
    
/* Function */     

function checkNumbers (customerNumbers, winningNumbers)
{
    for (i = 0; i < winningNumbers.length && !match; i++)
    {
        if (customerNumbers == winningNumbers[i])
        {
            match = true; 
        }
    }
} 

        if (match)
        {
    
             /* Add content with innerHTML */ 
    
            newHeadingWinningNumbers.innerHTML = "This Week's Winning Numbers are: ";
            newParagraphWinningNumbers.innerHTML = winningNumbers.join(", ");
            newHeadingCustomerNumbers.innerHTML = "The Customer's Number is: ";
            newParagraphCustomerNumbers.innerHTML = customerNumbers;
            newHeadingCommentary.innerHTML = "We have a match and a winner!"; 
        }

        else
        {
        
            /* Add content with innerHTML */ 
    
            newHeadingWinningNumbers.innerHTML = "This Week's Winning Numbers are: ";
            newParagraphWinningNumbers.innerHTML = winningNumbers.join(", ");
            newHeadingCustomerNumbers.innerHTML = "The Customer's Number is: ";
            newParagraphCustomerNumbers.innerHTML = "13"; 
            newHeadingCommentary.innerHTML = "Sorry you are not a winner this week."; 
    
        }