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的编译错误。我当时认为我说得对,我显然没有,所以非常感谢任何帮助。提前谢谢,
答案 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;
}