Unit 4B - Free Response - Climbing Club A

From CS Awesome 2CC BY-NC-SA 4.0Original page

Java1 class period1 exercise2 graded tests

Files

README.mdDownload

Unit 4B - Free Response - Climbing Club A

Each coding exercise has its own folder. Open its .java file and press Run to try it. Run Tests checks every graded exercise in this lesson at once.

The following is part a of a free response question from 2012. It was question 1 on the exam. You can see all the free response questions from past exams at Past AP CSA Exams.

Question 1. A mountain climbing club maintains a record of the climbs that its members have made. Information about a climb includes the name of the mountain peak and the amount of time it took to reach the top. The information is contained in the ClimbInfo class as declared below.

public class ClimbInfo
{
    /**
     * Creates a ClimbInfo object with name peakName and time climbTime.
     *
     * @param peakName the name of the mountain peak
     * @param climbTime the number of minutes taken to complete the climb
     */
    public ClimbInfo(String peakName, int climbTime)
    {
        /* implementation not shown */
    }

    /**
     * @return the name of the mountain peak
     */
    public String getName()
    {
        /* implementation not shown */
    }

    /**
     * @return the number of minutes taken to complete the climb
     */
    public int getTime()
    {
        /* implementation not shown */
    }

    // There may be instance variables, constructors, and methods
    // that are not shown.
}

The ClimbingClub class maintains a list of the climbs made by members of the club. The declaration of the ClimbingClub class is shown below. You will write two different implementations of the addClimb method. You will also answer two questions about an implementation of the distinctPeakNames method

public class ClimbingClub
{
    /**
     * The list of climbs completed by members of the club. Guaranteed not to be
     * null. Contains only non-null references.
     */
    private List<ClimbInfo> climbList;

    /** Creates a new ClimbingClub object. */
    public ClimbingClub()
    {
        climbList = new ArrayList<ClimbInfo>();
    }

    /**
     * Adds a new climb with name peakName and time climbTime to the list of
     * climbs.
     *
     * @param peakName the name of the mountain peak climbed
     * @param climbTime the number of minutes taken to complete the climb
     */
    public void addClimb(String peakName, int climbTime)
    {
        /* to be implemented in part (a) */
    }

    /**
     * @return the number of distinct names in the list of climbs
     */
    public int distinctPeakNames()
    {
        /* implementation shown in part (c) */
    }

    // There may be instance variables, constructors, and methods
    // that are not shown.
}

Part a. Write an implementation of the ClimbingClub method addClimb that stores the ClimbInfo objects in the order they were added. This implementation of addClimb should create a new ClimbInfo object with the given name and time. It appends a reference to that object to the end of climbList. For example, consider the following code segment.

ClimbingClub hikerClub = new ClimbingClub();
hikerClub.addClimb("Monadnock", 274);
hikerClub.addClimb("Whiteface", 301);
hikerClub.addClimb("Algonquin", 225);
hikerClub.addClimb("Monadnock", 344);

When the code segment has completed executing, the instance variable climbList would contain the following entries.

Picture of the list after the above code executes

How To Solve This

In the addClimb method you need to create a new ClimbInfo object and initialize the peakName and climbTime. How do you create a new object of a class and initialize the fields?

Once you have created the ClimbInfo object you want to add it in the order they were created. To do this you can add it to the end of the climbList. How do you add an object to the end of a list?

Check your understanding: How would you create a new object newClimb of the ClimbInfo class, with a peakName of Everest and climbTime of 600? — answer it on CS Awesome: https://runestone.academy/ns/books/published/csawesome2/climbClubA.html#fr_climbA_1

Check your understanding: How do you append a new item, 7, to the end of a non-empty ArrayList<Integer> list? — answer it on CS Awesome: https://runestone.academy/ns/books/published/csawesome2/climbClubA.html#fr_climbA_2

Try and Solve It

Exercise 1

Complete the method addClimb in the ClimbingClub class in the code. The code includes a main method that will test the addClimb method.

Open the 01-ClimbClubA folder and edit ClimbingClub.java. Press Run to try it; Run Tests checks it (2 tests).

Video - One way to code the solution

There are many possible solutions to this problem. The video below shows one solution.

The following video is also on YouTube at https://youtu.be/dAbU9_Qn92I. It walks through coding a solution.

For teachers

Unit 4B - Free Response - Climbing Club A

Students read CSAwesome2's “Unit 4B - Free Response - Climbing Club A” in CS Room and work through its 1 Java coding exercise.

  • Time: 1 class period
  • Tests: 2 in 1 graded exercise, set up for you when you import the lesson

Goals

  • Practice for Unit 4: Data Collections.

Before class

In class

  1. Students read README.md. Questions that need CS Awesome's interactive widgets link back to it.
  2. Students do exercise 01 in its folder, pressing Run to try their code.
  3. Run Tests checks every graded exercise at once; scores appear in the Gradebook. Grading uses your copy of the tests, so a student who edits theirs does not change the grade.

Exercises

FolderFileGradingTests
01-ClimbClubAClimbingClub.javaAutograded2

Teachers can download a reference solution after signing in.