Section3.15Free Response Question (FRQ) - StepTracker Class
The AP examβs second free response question (FRQ) is on classes, where students design and implement a described class. Students will be instructed to design and implement a class based on provided specifications and examples. A second class might also be included. Students will be provided with a scenario and specifications in the form of a table demonstrating ways to interact with the class and the results. The class must include a class header, instance variables, a constructor, a method, and implementation of the constructor and required method. (Inheritance is no longer covered in the AP exam and FRQs.)This question does not involve more complex topics such as arrays.
Write a constructor with the same name as the class and no return type. This constructor will probably have a parameter that is assigned to an instance variable and will need to assign default values to the other instance variables.
Write public methods in the class that use the instance variables as well as parameters and return values. These methods will probably use if statements but not more complex coding. One of these methods will probably be an accessor method that returns an instance variable or a calculated value that is dependent on the instance variables, and one will probably be a mutator method that changes the value of an instance variable.
This question involves the implementation of a fitness tracking system that is represented by the StepTracker class. A StepTracker object is created with a parameter that defines the minimum number of steps that must be taken for a day to be considered active. The StepTracker class provides a constructor and the following methods.
Days with at least 10,000 steps are considered active. Assume that the parameter is positive.
tr.activeDays();
0
No data have been recorded yet.
tr.averageSteps();
0.0
When no step data have been recorded, the averageSteps method returns 0.0.
tr.addDailySteps(9000);
This is too few steps for the day to be considered active.
tr.addDailySteps(5000);
This is too few steps for the day to be considered active.
tr.activeDays();
0
No day had at least 10,000 steps.
tr.averageSteps();
7000.0
The average number of steps per day is (14000 / 2).
tr.addDailySteps(13000);
This represents an active day.
tr.activeDays();
1
Of the three days for which step data were entered, one day had at least 10,000 steps.
tr.averageSteps();
9000.0
The average number of steps per day is (27000 / 3).
tr.addDailySteps(23000);
This represents an active day.
tr.addDailySteps(1111);
This is too few steps for the day to be considered active.
tr.activeDays();
2
Of the five days for which step data were entered, two days had at least 10,000 steps.
tr.averageSteps();
10222.2
The average number of steps per day is (51111 / 5).
This question asks you to write the complete StepTracker class, including the constructor and any required instance variables and methods. Your implementation must meet all specifications and conform to the example.
Subsection3.15.2Determining the Instance Variables
Work in pairs or groups to read through the problem statement and determine the instance variables required for this class. During the exam, it helps to circle the words that are important and may describe the instance variables. Different groups may come up with different variables that will still work. Groups should report back and compare answers in class to determine the best variables before writing the class.
Select the phrases below which probably mention an instance variable. Note that some of these may be referring to the same variable or to local variables.
Think about phrases that indicate a value that is being stored or changed or returned.
This question involves the implementation of a fitness tracking system
that is represented by the **StepTracker** class.A StepTracker object is created with a parameter that defines
the minimum number of steps that must be taken for a day to be active.The StepTracker class provides a constructor and the following methods.
- addDailySteps, which accumulates information about steps in readings
taken once per day.
- activeDays, which returns the number of active days.
- averageSteps, which returns the average number of steps per day
calculated by dividing the total number of steps taken
by the number of days tracked.
Given the StepTracker class description above, which of these statements describes an instance variable that the StepTracker constructor should set using a parameter?
Yes, addDailySteps(1000) is a mutator method that adds the steps given as a parameter to an instance variable that keeps track of the steps taken so far.
Subsection3.15.3Writing the Class Header and Constructor
You will receive at least 1 point if you write the class header and a constructor that has the same name as the class and no return type. You will receive another point for creating private instance variables inside the class. Complete the class definition below with the class name, the instance variables you determined above, and the constructor. Remember that for this problem, a StepTracker object is created (with a constructor) with a parameter that defines the minimum number of steps that must be taken for a day to be considered active. The constructor will often have a parameter which it should assign to an instance variable. It should also assign default values to the other instance variables.
Write the first draft of the class StepTracker below with the class name, the instance variables, and the constructor with a parameter for the minimum number of steps threshold for active days. Make sure it compiles.
Here is the rubric for the instance variables and the constructor for this problem. Did you receive all 3 points? In class, your teacher may have you grade each othersβ code.
Subsection3.15.4Writing the Accessor Method activeDays
Each method in the FRQ is worth 1 - 3 points. The method header is usually worth 1 point and the code in the method body is usually worth another point or two depending on how complex it is.
This problem asks you to write a simple accessor method called activeDays which returns the number of active days (which should be an instance variable) for 1 point.
Accessor methods need a return type since they return the value of an instance variable or a value calculated from instance variables, and they do not usually have a parameter.
Copy the code from your first draft of the class StepTracker above with the instance variables and constructor. Write the accessor methods activeDays which returns the number of active days.
Here is the rubric for the accessor method activeDays for this problem. The second column is small mistakes that will still earn the point but the third column is larger mistakes that will not earn the point. Did you receive the point for this method? In class, your teacher may have you grade each othersβ code.
class Example
{
// Instance variable declaration
private typeOfVar varName;
// Mutator method template
public void changeVarName(typeOfVar newValue)
{
// an instance variable is changed through = or an operator like +=, -=,
// ++, etc.
varName = newValue;
}
}
This multiple choice problem can help you determine the mutator method header.
The code for this mutator method is a little more complex than the template above, because it needs to change more than 1 instance variable. Notice the comments in the sample code execution:
Copy the code from your draft of the class StepTracker above with the class name, the instance variables, constructor, and accessory method. Write the mutator method addDailySteps which takes a parameter and adds it to the appropriate instance variable and changes other instance variables appropriately.
Here is the rubric for the mutator method for this problem. The second column is small mistakes that will still earn the point but the third column is larger mistakes that will not earn the point. Did you receive all the points? In class, your teacher may have you grade each othersβ code.
Subsection3.15.6Writing the Accessor Method averageSteps
This problem asks you to write a more complex accessor method which uses the instance variables to calculate and return the averageSteps for 2 points. This method returns the average number of steps per day, calculated by dividing the total number of steps taken by the number of days tracked.
Accessor methods need a return type since they return the value of an instance variable or a value calculated from instance variables, and they do not usually have a parameter.
The complex accessor method averageSteps() must calculate the average number of steps from your instance variables. Notice that the first time it is called in the sample code execution, it returns 0.0 since there are no steps recorded. This avoids a divide by 0 error.
When no step data have been recorded, the averageSteps method returns 0.0.
Activity3.15.13.
Copy the code from your draft of the class StepTracker above with the instance variables, constructor, accessor and mutator methods. Write the accessor method averageSteps which returns the average number of steps per day, calculated by dividing the total number of steps taken by the number of days tracked.
Here is the rubric for the averageSteps method for this problem. Did you receive all the points? In class, your teacher may have you grade each othersβ code.