Java Note that the class FitnessTracker is at the top of the inheritance hierarchy and that each of the classes inheriting it To simplify the problem, our classes are only storing one type of measurement, either the total number of steps class StepsFitnessTracker, or the total distance walked class DistanceFitnessTracker, or the average heart rate class HeartRateFitnessTracker. As opposed to what happens with commercial fitness trackers, none of our trackers is able to track simultaneously distance, heart rate and steps. Each of these classes also have a method with a signature similar to: public void addXYZ(XYZ newMeasurement) For example: - StepsFitnessTracker has addSteps(Steps steps) - HeartRateFitnessTracker has addHeartRage(HeartRate newHeartRate) These methods are meant to add more measurements to these objects, and they are meant to either keep the total distance, number of steps walked, or average heart rate. See the code provided and the comments in the code to understand how they work. Task Create an object of type FitnessExperiment that stores an array of StepsFitnessTracker, DistanceFitnessTracker, and HeartRateFitnessTracker objects. You could use code such as the following to initialise the array containing the fitness tracker measurements: FitnessTracker[] trackers = { new StepsFitnessTracker("steps", new Steps(230)), new StepsFitnessTracker("steps2", new Steps(150)), new StepsFitnessTracker("steps2", new Steps(150)), new HeartRateFitnessTracker("hr", new HeartRate(80)), new HeartRateFitnessTracker("hr", new HeartRate(80)) }; In the FitnessExperiment class, complete the implementation of the methods named getTotalSteps()and printExperimentDetails(). The comments in the code specify how they should operate and provide you with additional hints to get you started. You can use the method getSteps()in StepsFitnessTracker, but think how you will know the real type of each object in the array of fitness trackers (trackers in the example above). FitnessTracker HeartRateFitnessTracker DistanceFitnessTracker StepsFitnessTracker public class FitnessTracker { // String containing model name of fitness activity tracker private String modelName; public FitnessTracker(String modelName) { this.modelName = modelName; } public String getModelName() { return modelName; } /* @Override public boolean equals(Object obj) { // TODO Implement a method to check equality } */ } public class HeartRateFitnessTracker extends FitnessTracker { // Cumulative moving average HeartRate HeartRate avgHeartRate; // Number of heart rate measurements int numMeasurements; public HeartRateFitnessTracker(String modelName, HeartRate heartRate) { super(modelName); // Only one HeartRate to begin with; average is equal to single measurement this.avgHeartRate = heartRate; this.numMeasurements = 1; } public void addHeartRate(HeartRate heartRateToAdd) { // Calculate cumulative moving average of heart rate // See https://en.wikipedia.org/wiki/Moving_average double newHR = heartRateToAdd.getValue(); double cmaHR = this.avgHeartRate.getValue(); double cmaNext = (newHR + (cmaHR * numMeasurements)) / (numMeasurements + 1); this.avgHeartRate.setValue(cmaNext); numMeasurements ++; } // Getter for average heart rate public HeartRate getAvgHeartRate() { return avgHeartRate; } public String toString() { return "Heart Rate Tracker " + getModelName() + "; Average Heart Rate: " + getAvgHeartRate().getValue() + ", for " + numMeasurements + " measurements"; } /* @Override public boolean equals(Object obj) { // TODO Implement a method to check equality } */ } public class StepsFitnessTracker extends FitnessTracker { // Stores total number of steps private Steps totalSteps; public StepsFitnessTracker(String modelName, Steps steps) { super(modelName); this.totalSteps = steps; } // Add steps to the total public void addSteps(Steps stepsToAdd) { int numSteps = this.totalSteps.getValue() + stepsToAdd.getValue(); this.totalSteps.setValue(numSteps); } // Getter for total number of steps public Steps getTotalSteps() { return totalSteps; } public String toString() { return "Steps Tracker " + getModelName() + "; Total Steps: " + getTotalSteps().getValue(); } /* @Override public boolean equals(Object obj) { // TODO Implement a method to check equality } */ } Simply what we need to do is fix the three classes stepfitness,fitnesstracker and heartrate fitness and then create distance fitness and all this to fix the fitnessexpermient which stores one measurment from each We are not allowed to change the code we are allowed to remove any part saying "// TODO Implement a method to check equality" and replace it with a code to sastsfiy the code and its needs
Java
Note that the class FitnessTracker is at the top of the inheritance hierarchy and that each of the classes inheriting it
To simplify the problem, our classes are only storing one type of measurement, either the total number of steps class StepsFitnessTracker, or the total distance walked class DistanceFitnessTracker, or the average heart rate class HeartRateFitnessTracker. As opposed to what happens with commercial fitness trackers, none of our trackers is able to track simultaneously distance, heart rate and steps. Each of these classes also have a method with a signature similar to: public void addXYZ(XYZ newMeasurement) For example: - StepsFitnessTracker has addSteps(Steps steps) - HeartRateFitnessTracker has addHeartRage(HeartRate newHeartRate) These methods are meant to add more measurements to these objects, and they are meant to either keep the total distance, number of steps walked, or average heart rate. See the code provided and the comments in the code to understand how they work.
Task Create an object of type FitnessExperiment that stores an array of StepsFitnessTracker, DistanceFitnessTracker, and HeartRateFitnessTracker objects. You could use code such as the following to initialise the array containing the fitness tracker measurements: FitnessTracker[] trackers = { new StepsFitnessTracker("steps", new Steps(230)), new StepsFitnessTracker("steps2", new Steps(150)), new StepsFitnessTracker("steps2", new Steps(150)), new HeartRateFitnessTracker("hr", new HeartRate(80)), new HeartRateFitnessTracker("hr", new HeartRate(80)) }; In the FitnessExperiment class, complete the implementation of the methods named getTotalSteps()and printExperimentDetails(). The comments in the code specify how they should operate and provide you with additional hints to get you started. You can use the method getSteps()in StepsFitnessTracker, but think how you will know the real type of each object in the array of fitness trackers (trackers in the example above). FitnessTracker HeartRateFitnessTracker DistanceFitnessTracker StepsFitnessTracker
public class FitnessTracker {
// String containing model name of fitness activity tracker
private String modelName;
public FitnessTracker(String modelName) {
this.modelName = modelName;
}
public String getModelName() {
return modelName;
}
/*
@Override
public boolean equals(Object obj) {
// TODO Implement a method to check equality
}
*/
}
public class HeartRateFitnessTracker extends FitnessTracker {
// Cumulative moving average HeartRate
HeartRate avgHeartRate;
// Number of heart rate measurements
int numMeasurements;
public HeartRateFitnessTracker(String modelName, HeartRate heartRate) {
super(modelName);
// Only one HeartRate to begin with; average is equal to single measurement
this.avgHeartRate = heartRate;
this.numMeasurements = 1;
}
public void addHeartRate(HeartRate heartRateToAdd) {
// Calculate cumulative moving average of heart rate
// See https://en.wikipedia.org/wiki/Moving_average
double newHR = heartRateToAdd.getValue();
double cmaHR = this.avgHeartRate.getValue();
double cmaNext = (newHR + (cmaHR * numMeasurements)) / (numMeasurements + 1);
this.avgHeartRate.setValue(cmaNext);
numMeasurements ++;
}
// Getter for average heart rate
public HeartRate getAvgHeartRate() {
return avgHeartRate;
}
public String toString() {
return "Heart Rate Tracker " + getModelName() +
"; Average Heart Rate: " + getAvgHeartRate().getValue() +
", for " + numMeasurements + " measurements";
}
/*
@Override
public boolean equals(Object obj) {
// TODO Implement a method to check equality
}
*/
}
public class StepsFitnessTracker extends FitnessTracker {
// Stores total number of steps
private Steps totalSteps;
public StepsFitnessTracker(String modelName, Steps steps) {
super(modelName);
this.totalSteps = steps;
}
// Add steps to the total
public void addSteps(Steps stepsToAdd) {
int numSteps = this.totalSteps.getValue() + stepsToAdd.getValue();
this.totalSteps.setValue(numSteps);
}
// Getter for total number of steps
public Steps getTotalSteps() {
return totalSteps;
}
public String toString() {
return "Steps Tracker " + getModelName() +
"; Total Steps: " + getTotalSteps().getValue();
}
/*
@Override
public boolean equals(Object obj) {
// TODO Implement a method to check equality
}
*/
}
Simply what we need to do is fix the three classes stepfitness,fitnesstracker and heartrate fitness and then create distance fitness and all this to fix the fitnessexpermient which stores one measurment from each
We are not allowed to change the code we are allowed to remove any part saying "// TODO Implement a method to check equality" and replace it with a code to sastsfiy the code and its needs
Trending now
This is a popular solution!
Step by step
Solved in 2 steps