Question

    package edu.tests.model;

    /**
     * TestResult represents the grade on a test for one student.
     * 
     * @author 
     * @version 
     */
    public class TestResult {

        private String id;
        private int grade;

        /**
         * Creates a new instance of TestResult with the specified
         * ID of the student who took the test and the grade the
         * student earned. 
         * 
         * @requires id != null && id.length() > 0 && grade >= 0
         * @ensures  getId().equals(id) && getGrade() == grade
         * 
         * @param id the student's ID
         * @param grade the student's grade on the test
         */
        public TestResult(String id, int grade) {
            this.id = id;
            this.grade = grade;
        }

        /**
         * Returns the ID of the student.
         * 
         * @requires nothing
         * 
         * @return the student's ID
         */
        public String getId() {
            return this.id;
        }

        /**
         * Returns the grade earned by the student.
         * 
         * @requires nothing
         * 
         * @return the student's test grade
         */
        public int getGrade() {
            return this.grade;
        }


        /** 
         * Returns true if the specified object is a TestResult instance
         * with the same student ID, and false otherwise.
         * 
         * @requires nothing
         * 
         * @return true iff someObject is a TestResult with the same student ID
         */
        @Override
        public boolean equals(Object someObject) {
            if (this == someObject) {
                return true;
            }
            if (someObject == null) {
                return false;
            }
            if (this.getClass() != someObject.getClass()) {
                return false;
            }
            TestResult aTestResult = (TestResult) someObject;

            return this.getId().equals(aTestResult.getId());
        }

    }

package edu.westga.tests.model;

import java.util.ArrayList;

/**
 * Gradebook represents the test results for all students who took a test.
 * 
 * @author
 * @version 
 */
public class Gradebook {

    // TODO #1: declare an instance variable called results, which is an
    // ArrayList of TestResult objects
    ArrayList<TestResult> results;

    /**
     * Creates a new Gradebook object with no test results.
     * 
     * @requires nothing
     * @ensures size() = 0
     */
    // TODO#2: implement a constructor with 0 parameters that
    // initializes the instance variable as an empty ArrayList
    public Gradebook() {
        this.results = new ArrayList<TestResult>();
    }

    /**
     * Returns the number of test results that have been added to this
     * Gradebook.
     * 
     * @requires nothing
     * 
     * @return how many test results this Gradebook records
     */
    // TODO#3: implement the method size, which returns an int and takes
    // 0 parameter
    public int size() {
        return this.results.size();

    }

    /**
     * Adds the specified test result to this Gradebook.
     * 
     * @requires aResult != null && !contains(aResult)
     * @ensures size() == size()@prev + 1 && contains(aResult)
     * 
     * @param aResult
     *            the test result to add to this Gradebook
     */
    // TODO#4: implement the method add, with 1 parameter called aResult of type
    // TestResult
    // Please read the comments for the method to understand what it does
    public int add(TestResult aResult) {
        return this.add(aResult);
    }

    /**
     * Returns true if a TestResult with the same ID as the specifed test result
     * has previously been added to this Gradebook, and false otherwise.
     * 
     * @requires aResult != null
     * 
     * @return true iff the aResult has the same ID as a TestResult that has
     *         already been added
     * 
     * @param aResult
     *            the test result to check
     */
    // TODO#5: implement the method contains, which returns a boolean
    // and takes 1 parameter of type TestResult
    public boolean contains(TestResult aResult) {
        return this.contains(aResult);
    }

    /**
     * Returns the average grade of the test results that have been added to
     * this Gradebook, or 0 if none have been added.
     * 
     * @requires nothing
     * 
     * @return the mean grade
     */
    // TODO#6: implement method averageGrade, which returns an int
    // and takes 0 parameters

    public int averageGrade() {
        for (int i = 0; i < results.size(); i++);

        {
            TestResult theResult = results.get(i);
            int averageGrade = theResult.getGrade();

        }

    }

}

Hey everyone, I am trying to write a for-each loop which will return the average grade of the test results that have been added to the grade book. I am new to writing these loops so bear with me, but I am getting a compile error on the results.get when I put the i in the brackets of the get method. I was thinking that I had it right, I obviously do not, so any help is greatly appreciated. Thanks in advance,

Was it helpful?

Solution 2

First, I doubt your code compiles since your averageGrade() method does not return anything...

Try this one:

public int averageGrade() {
        int totalGrade=0;
        int i = 0;
        for (; i < results.size(); i++);
        {
            TestResult theResult = results.get(i);
            totalGrade += theResult.getGrade();
        }
        if (i>0)
           return totalGrade/i;
        else return 0;

    }

OTHER TIPS

you have

for (int i = 0; i < results.size(); i++);

        {
            TestResult theResult = results.get(i);
            int averageGrade = theResult.getGrade();

        }

You can't have a semicolon after the for loop, and you need to return an int... so you most likely need need

int averageGrade;
for (int i = 0; i < results.size(); i++)
      {
            TestResult theResult = results.get(i);
            averageGrade = theResult.getGrade();

        }
return averageGrade;

They way to have it, Java thinks the For loop is on it's own. Then it sees these random braces and is very confused about why they are there, hence a compile time error. It also thinks your going to return an int, and you don't so it gets confused again.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top