这个小项目由两个类和一个ArrayList组成。 ArrayList有两个元素:name
和score
。是否可以找到元素score
的平均值?
班级classroom
:
/**
* This class creates the names and scores of the students
*/
public class Classroom
{
public int score;
public String name;
/**
* Constructor for the Class that adds a name and a score.
*/
public Classroom(String aName, int aScore)
{
score = aScore;
name = aName;
}
/**
* Return the name of the students
*/
public String returnName()
{
return name;
}
/**
* Return the scores
*/
public int returnScore()
{
return score;
}
}
班级TestScores
:
import java.util.ArrayList;
/**
* Print test scrose and student names as well as he average for the class.
*/
public class TestScores
{
private ArrayList<Classroom> scores;
public int studentScores;
/**
* Create a new ArrayList of scores and add some scores
*/
public TestScores()
{
scores = new ArrayList<Classroom>();
}
/**
* Add a new student and a new score.
*/
public void add (String name, int score)
{
scores.add(new Classroom(name, score));
if(score > 100){
System.out.println("The score cannot be more than 100");
}
}
您是否能够为每个循环使用a,创建一个局部变量来存储教室类中returnScore
方法的学生分数并将其除以数组大小?
答案 0 :(得分:4)
使用Java 8流,这应该做的工作
public double getAvg(){
return scores.stream()
.mapToInt(x -> x.returnScore())
.average()
.getAsDouble();
}
答案 1 :(得分:3)
如果您returnScore()
中的每个元素都scores
,并将每个returnScore()
添加到局部变量,然后将该变量除以scores.Size()
,那么应该得到你想要的东西。如果我误解了这个问题,请告诉我。在TestScores类中执行此操作。
答案 2 :(得分:1)
简单的解决方案是在数组列表上运行for循环并计算得分总和除以数组大小。
但是在TestScores类或其他类中执行此操作。 ClassRoom是个人分数,因此您无法存储该课程的总分或平均分。
其次你的建模不正确。你称之为ClassRoom,而它只能有一个学生及其分数。
另外在您的添加方法中,您的分数检查&gt; 100是你添加分数后。您应该先检查,如果不大于100,则只添加到列表中。
答案 3 :(得分:0)
另一种方法是在Classroom类中添加两个静态变量: totalScore 和 totalStudents 。然后在Classroom的构造函数中增加这两个变量(totalScore ++,totalStudents ++)。 最后,您可以在类Classroom中创建静态方法以获得平均值:
public static double getAverage(){
return (double)totalScore/(double)totalStudents;
}