Flow Control Exercise
Estimated time to read: 5 minutes
Using Java Flow control¶
Create a new class named Lab3. Ensure that the new Lab3 class has a main() method.
Exercise 1: 'for' loop¶
package io.entityfour.exercises.coursera;
public class Lab3 {
    public static void main(String[] args) {
 // Create an array of String references named daysOfWeek and initialise it with the names of the days of the week starting with Sunday.
    String[] daysOfWeek = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
    //
    // Write a for loop to print out each element of the array. 
    //
    // Do this two ways – the first using the standard for loop
    //                    the second using the for-next construct.
 // Standard For loop
        // Create an int, i, for us to count with
        // Compare i against the length of the array
        // Run the code block
        // Apply the post block content, add 1 to i
 for (int i = 0; i < daysOfWeek.length; i++){
  System.out.println(daysOfWeek[i]);
 }
    // For-Next loop
        // Ha no, these are out dated. Everyone just uses for loops these days
    // Write another for loop to print out each element of the array in reverse. 
    // Note that the only way this can be done is by using the standard for loop.
        // Get array length, minus 1 becaues arrays start at 0
        // If i is greater than 0, run the code
        // Take 1 off of i
    for (int i = daysOfWeek.length - 1 ; i > 0; i--) {
        System.out.println(daysOfWeek[i]);
    }
    }
}
Exercise 2: 'while' loop¶
package io.entityfour.exercises.coursera;
public class Lab3_2 {
    public static void main(String[] args) {
    // Create a while loop that will print out only even numbers between 1 and 20.
        // Create an int with a value of 0
    int i = 0;
        // Create a while loop that evaluates i++ less than 20. The postfix is run after the evaluration remember!
    while (i++ < 20){
        // Print out a new line with the value of i
        System.out.println(i);
    }
    // // Use the continue statement and an if statement to skip printing the odd numbers (i.e. increment the counter by 1 each time through the loop).
    //     // Create an int with a value of 0
    // i = 0;
    //     // Create a while loop that evaluates i++ less than 20. The postfix is run after the evaluration remember!
    // while (i++ < 20){
    //     // If i is divisible by 2 and leaves no remainder, it must be even.
    //     if (i % 2 == 0){
    //         System.out.println(i);
    //     }
    // }
    // Theres a better way to do this I think...
        // Create an int with a value of 0
    i = 0;
        // i & 1 produces a value that is either 1 or 0, depending on the least significant bit of i: 
        // If the last bit is 1, the result of i & 1 is 1; otherwise, it is 0. 
        // This is a bitwise AND operation.
        // All odd numbers have a least significant (last) bit of 1
        // All even numbers have a least significant (last) bit of 0
        // It is not readable though :S But neat at least.
    while (i++ < 20){
        if ( (i & 1) == 0 ) {
            System.out.println(i);
        }
    }
    }
}
Exercise 3 - for loop¶
package io.entityfour.exercises.coursera;
public class Lab3_3 {
    public static void main(String[] args) {
        //Create a for loop that will print out all numbers between 1 and 100 except 50 thru 60.
        for (int i = 1; i < 100; i++){
            if (i < 50) {
                System.out.println(i);
            }
            else if (i > 60) {
                System.out.println(i);
            }
        }
    }
}
Exercise 4 - switch statement¶
This is how not to do this¶
package io.entityfour.exercises.coursera;
public class Lab3_4 {
    public static void main(String[] args) {
        String[] monthNames = {"January", "February", "March", "April", "May","June","July","August","September","October","November","December"}; // Declare an array with string values
        int[] daysInMonths = new int[12];
        daysInMonths[0] = 31;
        daysInMonths[1] = 28;
        daysInMonths[2] = 31;
        daysInMonths[3] = 30;
        daysInMonths[4] = 31;
        daysInMonths[5] = 30;
        daysInMonths[6] = 31;
        daysInMonths[7] = 31;
        daysInMonths[8] = 30;
        daysInMonths[9] = 31;
        daysInMonths[10] = 30;
        daysInMonths[11] = 31;
        int i = 1;
        while (i <= 12) {
            switch (i) {
                default:
                    System.out.println(monthNames[i-1] + " has " + daysInMonths[i-1] + " days.");
                    i++;
            }
        }
    }
}
This is a bit better¶
package io.entityfour.exercises.coursera;
public class Lab3_4 {
    public static void main(String[] args) {
        // Create a while loop that will execute the following code 12 times using a counter that starts at 1 and is incremented by 1 each time through the loop.
        int i = 1;
        while (i > 12);
            // Within the while loop, create a switch statement that will print out the number of days in each of the months of the year.
            switch (i) {
                case 1:
                    System.out.print("January ");
                case 3:
                    System.out.print("March ");
                case 5:
                    System.out.print("May ");
                case 7:
                    System.out.print("July ");
                case 8:
                    System.out.print("August ");
                case 10:
                    System.out.print("October ");
                case 12:
                    System.out.print("December ");
                    System.out.println("have 31 days.");
                case 4:
                    System.out.print("April ");
                case 6:
                    System.out.print("June ");
                case 9:
                    System.out.print("September ");
                case 11:
                    System.out.print("November ");
                    System.out.println("have 30 days.");
                case 2:
                    System.out.print("February ");
                    System.out.println("have 28 days.");
            }
        }
    }
Challenge Exercise¶
This is good enough for now. It works, but it is hard coded to work. If you change the startDay, it breaks!
package io.entityfour.exercises.coursera;
public class Lab3_5 {
    public static void main(String[] args) {
        System.out.println("Start of output for Challenge Exercise");
        // String array with days of the week
        String[] daysOfWeek = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
        // Int with count of days in month
        int daysInMonth = 31;
        int startDate = 1;
        // Starting Day
        int startingDay = 5;
        // Print the days of the week array to the console
        for (String da : daysOfWeek) {
            System.out.print(da);
            System.out.print("\t");
        }
        System.out.println("\t");
        // Create the dates in the calendar
        // For each line count in rowCount, make a row of columns based upon the count of columnCount
        for (int rowCount = 5; rowCount > 0; rowCount--) {
            int columnCount = 6;
            if (rowCount == 5) {
                do  {
                    System.out.print("\t");
                    --startingDay;
                } while ( startingDay > 0);
                columnCount = startingDay + 1;
            }
            for (columnCount++; columnCount > 0; columnCount--) {
                if (startDate < daysInMonth){
                    System.out.print(startDate++);
                    System.out.print("\t"); // The usage of a '\t' here is neat. It is an escaped 'tab', better than using spaces.
                }
            }
            System.out.println("");
        }
    }
}
// Create the necessary variables, loops and flow control to print March as a calendar. The calendar will have:
    // a. A heading with the days of the week
    // b. 5 rows with the days of the month in the correct column
    // c. Assume that March 1 starts on a Friday
    // d. Each week on the calendar should flow from Sunday – Saturday (left to right).
    // e. You can use the function System.out.print() to print information to the console without adding a carriage return.