160k views
2 votes
SHOW ALL YOUR WORK. REMEMBER THAT PROGRAM SEGMENTS ARE TO BE WRITTEN IN

JAVA.
• Assume that the classes listed in the Java Quick Reference have been imported where appropriate.
• Unless otherwise noted in the question, assume that parameters in method calls are not null and that methods are called only when their preconditions are satisfied.
• In writing solutions for each question, you may use any of the accessible methods that are listed in classes defined in that question. Writing significant amounts of code that can be replaced by a call to one of these methods will not receive full credit.
A manufacturer wants to keep track of the average of the ratings that have been submitted for an item using a running average. The algorithm for calculating a running average differs from the standard algorithm for calculating an average, as described in part (a).
A partial declaration of the RunningAverage class is shown below. You will write two methods of the RunningAverage class.
*
public class RunningAverage
{
}
/** The number of ratings included in the running average. private int count;
/** The average of the ratings that have been entered. */ private double average;
// There are no other instance variables.
/** Creates a RunningAverage object.
* Postcondition: count is initialized to 0 and average is
* initialized to 0.0.
*/
public RunningAverage()
{ /* implementation not shown */ }
/** Updates the running average to reflect the entry of a new
* rating, as described in part (a).
*/
public void updateAverage (double newVal)
{ /* to be implemented in part (a) */ }
/** Processes num new ratings by considering them for inclusion
* in the running average and updating the running average as
necessary. Returns an integer that represents the number of
*
* invalid ratings, as described in part (b).
* Precondition: num > 0
*/
public int processNewRatings (int num)
{ /* to be implemented in part (b) */ }
/** Returns a single numeric rating.
public double getNewRating()
{ /* implementation not shown */ }
(a) Write the method updateAverage, which updates the RunningAverage object to include a new rating. To update a running average, add the new rating to a calculated total, which is the number of ratings times the current running average. Divide the new total by the incremented count to obtain the new running
average.
For example, if there are 4 ratings with a current running average of 3.5, the calculated total is 4 times 3.5, or 14.0. When a fifth rating with a value of 6.0 is included, the new total becomes 20.0. The new running average is 20.0 divided by 5, or 4.0.
Complete method updateAverage.
/** Updates the running average to reflect the entry of a new
* rating, as described in part (a).
*/
public void updateAverage (double newVal)
(b) Write the processNewRatings method, which considers num new ratings for inclusion in the running average. A helper method, getNewRating, which returns a single rating, has been provided for you.
The running average must only be updated with ratings that are greater than or equal to zero. Ratings that are less than 0 are considered invalid and are not included in the running average.
The processNewRatings method returns the number of invalid ratings. See the table below for three examples of how calls to process NewRatings should work.
Statement
Ratings
processNewRatings
Generated
Return Value
processNewRatings (2)

2.5, 4.5
processNewRatings (1)
-2.0
1
0.0,
-2.2,
processNewRatings (4)
2
3.5, -1.5
Comments
Both new ratings are included
in the running average.
No new ratings are included in the running average.
Two new ratings (0.0 and 3.5) are included in the running
average.
Complete method processNewRatings. Assume that updateAverage works as specified, regardless of what you wrote in part (a). You must use getNewRating and updateAverage appropriately to receive full
credit.
/** Processes num new ratings by considering them for inclusion
* in the running average and updating the running average as
*
necessary. Returns an integer that represents the number of
* invalid ratings, as described in part (b).
* Precondition: num > 0
*/
public int processNewRatings (int num)

2 Answers

2 votes

Final answer:

The updateAverage method updates the running average by incorporating a new rating, whereas the processNewRatings method processes multiple new ratings and updates the running average accordingly, counting the number of invalid ratings (those less than 0).

Step-by-step explanation:

To solve part (a), the updateAverage method should update the running average of the ratings by considering the new value (newVal) received. The updated average can be calculated by multiplying the current count (number of ratings) by the current average to get the total sum of all the ratings so far, adding the newVal to this total, incrementing the count by 1, then dividing the new total by the new count.

The processNewRatings method is designed to process a given number (num) of new ratings by updating the running average while ignoring negative ratings, which are considered invalid. This method returns the count of these invalid ratings.

Update Average Method

public void updateAverage(double newVal) {
double total = this.average * this.count;
total += newVal;
this.count++;
this.average = total / this.count;
}

Process New Ratings Method

public int processNewRatings(int num) {
int invalidCount = 0;
for (int i = 0; i < num; i++) {
double rating = getNewRating();
if (rating >= 0) {
updateAverage(rating);
} else {
invalidCount++;
}
}
return invalidCount;
}

User Jackrugile
by
4.2k points
4 votes
It’s g zzzzzzzzzzzzzzzzzzzzzzzz
User SGal
by
4.0k points