James Madison University, Fall 2017 Semester
Lab12: Practice with nested loops
Background
In the good old days, we didn't have fancy computer graphics. So we had to rely on ASCII art and the user's imagination. Today's lab will take you back in time! Your task is to draw various pictures of stars ('*'
) that require the creative use of iteration and decisions.
Collaboration: You are encouraged to work with another student to complete this lab. Each of you should submit your own copy of the programs. It's okay if your files are similar or identical, as long as both of your names are present at the top.
Objectives
Write nested for loops and decisions.
Solve counting problems with loops.
Instructions
-
Download Stars.java and open your favorite editor.
-
Write your name and today's date in the class comment.
-
Compile and run the program. What shape does this pattern produce?
-
Notice the relationship between the
row
(outer loop) and the number of stars that are printed. -
Notice the relationship between the
col
(inner loop) and the place where we move to a new line. -
Add code to your program to carry out Patterns A, B, and C as shown below.
-
Submit Stars.java via Canvas by the end of the day, Friday.
-
If you finish early, you may use the remaining time to work on PA3.
Pattern A
********** ********* ******** ******* ****** ***** **** *** ** *
The leftmost stars are in the leftmost output column. Test your code with an odd number of stars and an even number of stars.
HINT: While developing the code, replace each space with another character that is visible.
Pattern B
* ** *** **** ***** ****** ******* ******** ********* **********
The leftmost star of the last row is in the first position of the output column.
HINT: You used starCnt in the original example and Pattern A. You should think about using the blnkCnt variable as well.
Pattern C
********** ********* ******** ******* ****** ***** **** *** ** *
The top row, leftmost star is in the first position of the output.
HINT: It should be the same as Pattern B, except for the way you calculate blnkCnt and starCnt.
Generalization
Create a new void method called print
that encapsulates the code that Patterns A, B, and C have in common.
Add parameters that generalize the method so that it works for Patterns A, B, C, and potentially other patterns.
Be sure to write a meaningful documentation comment including @param
tags.
Replace any duplicated code in main
with method calls to your print
method.
Pattern D (Extra Credit)
* *** ***** ******* ********* ********* ******* ***** *** *
For an odd number of rows, you would only have one middle line. The middle row leftmost star is in the first position of the output.
HINT: Consider writing two loops: one for the top half, and another for the bottom half. You may also want to increment and decrement starCnt and blnkCnt, rather than calculate them directly based on the row number.