CPSC 170 Lab 1: More Arrays

As usual, create a lab1 subdirectory for today's lab, open this document in Mozilla, and start emacs.

Collecting Tunes

File CDCollection.java contains the code for the CDCollection class (p.388-390) that we discussed in class. File CD.java contains the code for the CD class (p. 391-392) that CDCollection uses, and Tunes.java contains a slightly modified version of the Tunes class (p. 387) that uses CDCollection. Save these files to your directory.
  1. Compile and run Tunes.java. You should see a list of 6 CDs with a total value of $97.69 and an average cost of $16.28 followed by a menu that lets you add, search for, or remove a CD. Only the add part has been implemented, so add a few CDs to see what happens. When you add the 11th CD (total), you should get a message that says "Increasing size of array" (you may have to scroll back to see it), which comes from the increaseSize() method. I added this just to help you follow the program's execution.

  2. Now you'll add the search functionality:
    1. First you need to be able to tell when two CDs are "the same." You could compare titles and/or artists, but it's cleanest to add an equals method to your CD class and use that. Add method public boolean equals(CD otherCD) to the CD class, and have it require that both the title and the artist be the same for two CDs to be equal.

    2. Add the findCD method from the prelab to the CDCollection class. Remember our discussion in class, and don't look through the array any longer than you have to. Don't forget the documentation.

    3. Now run Tunes again and choose the search option. Look for some CDs that are in the collection, some that some not, and at least one that you added to the original collection.

    4. As written, the search option in Tunes asks for the title, artist, price, and tracks because the CD constructor requires all four pieces of information. There's no need to make the user enter the price and tracks when only the title and artist are relevant to the search. You could pass dummy values to the constructor for the price and tracks, but better yet, add a new constructor to the CD class that takes just the title and artist. Now modify the Tunes class so that it prompts for just the title and artist on the search function, then creates a new CD object (using the new two-parameter constructor) and passes it to findCD.

    Test your search option thoroughly!

  3. Now you'll add the remove functionality. A skeleton for a method public void removeCD(CD cd) is already in the CDCollection class. Your job is to complete it so that it removes the given CD from the collection if it is in there; if not, the collection should remain unchanged. Proceed as follows:

    You'll also need to add code in Tunes to get information from the user and call removeCD when they choose the remove option.

    Test the remove functionality. Be sure to try removing more than one CD, removing a CD that is not in the collection, and mixing removes with searches and adds.

    Magic Squares

    One interesting application of two dimensional arrays is magic squares. A magic square is a square matrix in which the sum of every row, every column, and both diagonals is the same. Magic squares have been studied for many years, and there are some particularly famous magic squares. In this exercise you will write code to determine whether a square is magic.

    File Square.java contains the shell for a class that represents a square matrix. It contains headers for a constructor that takes the size of the square and a scanner to read from, plus headers for methods to read values into the square, print the square, find the sum of a given row, find the sum of a given column, find the sum of the main (or other) diagonal, and determine whether the square is magic. Note that the read method has been written for you, but you will need to write the others.

    File SquareTest.java contains the shell for a program that reads input for squares and tells whether each is a magic square. Following the comments fill in the remaining code, but take it a piece at a time as follows: