1.题目要求:
有如下Student 2对象,
private String name;
private int age;
private int score;
private String classNum;
其中,classNum 表示学生的班号,例如“class05”。 有如下
List List list = new ArrayList();
list.add(new Student2(“Tom”, 18, 100, “class05”));
list.add(new Student2(“Jerry”, 22, 70, “class04”));
list.add(new Student2(“Owen”, 25, 90, “class05”));
list.add(new Student2(“Jim”, 30,80 , “class05”));
list.add(new Student2(“Steve”, 28, 66, “class06”));
list.add(new Student2(“Kevin”, 24, 100, “class04”));
在这个list 的基础上,完成下列要求:
1) 计算所有学生的平均年龄
2) 计算各个班级的平均分
2.解题思路
(1)我们需要创建一个Student
类,该类包含name
,age
,score
,和classNum
这四个属性,并为每个属性提供getter和setter方法。
(2)创建一个Demo类,导入Student类,在这个Demo类中,我们创建一个ArrayList
来存储Student
对象,并使用之前提供的数据填充这个列表。
(3):计算所有学生的平均年龄,可以遍历Student2
列表,将每个学生的年龄加起来,然后除以学生的总数。
(4):计算各个班级的平均分,根据学生类的classNum属性,区分不同班级,根据区分到的班级叠加总分和记录学生数量,在整体学生遍历完后,在分别除以对应学生总数,从而得到各班的平均分。
import java.sql.Array;
import java.util.ArrayList;
import java.util.List;
public class Demo {
public static void main(String[] args) {
/*
在这个list 的基础上,完成下列要求:
1) 计算所有学生的平均年龄
2) 计算各个班级的平均分
* */
int allAge=0;
int[] score04=new int[2];
int[] score05=new int[2];
int[] score06=new int[2];
List list = new ArrayList<>();
list.add(new Student2("Tom", 18, 100, "class05"));
list.add(new Student2("Jerry", 22, 70, "class04"));
list.add(new Student2("Owen", 25, 90, "class05"));
list.add(new Student2("Jim", 30,80 ,"class05"));
list.add(new Student2("Steve", 28, 66, "class06"));
list.add(new Student2("Kevin", 24, 100,"class04"));
for (int i = 0; i < list.size(); i++) {
Student2 stu= (Student2) list.get(i);
allAge+=stu.getAge();
}
System.out.println("所有学生的平均年龄是:"+allAge/ list.size());
for (int i = 0; i < list.size(); i++) {
Student2 stu= (Student2) list.get(i);
if (stu.getClassNum().equals("class04"))
{
score04[0]+=stu.getScore();
score04[1]++;
}
if (stu.getClassNum().equals("class05"))
{
score05[0]+=stu.getScore();
score05[1]++;
}
if (stu.getClassNum().equals("class06"))
{
score06[0]+=stu.getScore();
score06[1]++;
}
}
float score1=(float)score04[0]/score04[1];
float score2=(float)score05[0]/score05[1];
float score3=(float)score06[0]/score06[1];
System.out.println("class04的平均成绩是"+String.format("%.2f",score1)+"\nclass05的平均成绩是"+String.format("%.2f",score2)+"\nclass06的平均成绩是"+String.format("%.2f",score3));
}
}
3.代码主要使用方法记录:
(1)浮点数的小数保留
String的format方法
double f = 111231.5585;
System.out.println(String.format("%.2f", f));
(2)字符串的比较
使用.equals()
方法:当需要比较两个字符串的内容是否相同时,应该使用String
类的equals()
方法。这是一个逻辑比较,它检查两个字符串的字符序列是否相同,而不考虑字符串中的对象引用是否相同
4.改进
在本题的循环遍历中,采用普通的for循环,可以改为for增强循环。在此之前,需注意集合的创建需改为: List<Student2> list = new ArrayList<Student>();
原因解释:如果list是一个List<?>或List<Object>,那么增强for循环中的循环变量必须是Object类型,因为List<?>和List<Object>可以包含任何类型的对象。所以使用原来的集合创建方法会无法使用对应Student2的for增强遍历方法。