对于java中的每个循环

时间:2014-03-26 02:35:54

标签: java for-loop each

    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();

        }

    }

}

大家好,我正在尝试编写一个for-each循环,它将返回已添加到成绩簿中的测试结果的平均成绩。我是新手写这些循环所以请耐心等待,但是当我把i放在get方法的括号中时,我得到了result.get的编译错误。我当时认为我说得对,我显然没有,所以非常感谢任何帮助。提前谢谢,

2 个答案:

答案 0 :(得分:1)

你有

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

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

        }

在for循环后你不能有分号,你需要返回一个int ...所以你很可能需要

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

        }
return averageGrade;

他们想要拥有它,Java认为For循环是它自己的。然后它会看到这些随机括号并且非常混淆它们为什么存在,因此编译时错误。它也认为你将返回一个int,而你不会再次混淆。

答案 1 :(得分:0)

首先,我怀疑你的代码编译,因为你的averageGrade()方法没有返回任何内容......

试试这个:

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;

    }