Free Response - Climbing Club C¶
The following is part c 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 https://apstudents.collegeboard.org/courses/ap-computer-science-a/free-response-questions-by-year.
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 c. The ClimbingClub
method distinctPeakNames
is intended to return the number of different
names in climbList
. For example, after the following code segment has completed execution, the value
of the variable numNames
would be 3.
ClimbingClub hikerClub = new ClimbingClub();
hikerClub.addClimb("Monadnock", 274);
hikerClub.addClimb("Whiteface", 301);
hikerClub.addClimb("Algonquin", 225);
hikerClub.addClimb("Monadnock", 344);
Consider the following implementation of method distinctPeakNames.
/** @return the number of distinct names in the list of climbs */
public int distinctPeakNames()
{
if (climbList.size() == 0)
{
return 0;
}
ClimbInfo currInfo = climbList.get(0);
String prevName = currInfo.getName();
String currName = null;
int numNames = 1;
for (int k = 1; k < climbList.size(); k++)
{
currInfo = climbList.get(k);
currName = currInfo.getName();
if (prevName.compareTo(currName) != 0)
{
numNames++;
prevName = currName;
}
}
return numNames;
}
- yes
- Did you trace it to see what it would do?
- no
- This code depends on the peakNames being in alphabetical order by peakName.
8-9-1: Does this implementation of the distinctPeakNames
method work as intended when the addClimb
method stores the ClimbInfo
objects in the order they were added as described in part (a)?
- yes
- This code depends on the peakNames being in alphabetical order by peakName.
- no
- Did you trace it to see what it would do?
8-9-2: Does this implementation of the distinctPeakNames
method work as intended when the addClimb
method stores the ClimbInfo
objects in alphabetical order by name as described in part (b)?