面试真题给定3个班级,班级id号分别为c1,c2,c3,随机生成一个List<Student> students,每个班级的score和classId均随机,输出每个班级里学生的平均成绩
Posted Cry丶
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试真题给定3个班级,班级id号分别为c1,c2,c3,随机生成一个List<Student> students,每个班级的score和classId均随机,输出每个班级里学生的平均成绩相关的知识,希望对你有一定的参考价值。
给定一个基本数据类型如下:
class Student
int score; // 成绩
String classId; // 班级id号
给定3个班级,班级id号分别为c1,c2,c3,随机生成一个List<Student> students; 该students的size()为15000,每一个学生Student的班级随机从c1、c2和c3中选取,每一个学生Student的成绩score随机从60到100随机选取,输出为每个班级里学生的平均成绩(多线程)。
参考代码
class Solution
// 分治的思想,把原列表分成3个列表开3个线程分别处理即可
public static void solution(List<Student> list)
List<Student> listC1 = new ArrayList();
List<Student> listC2 = new ArrayList();
List<Student> listC3 = new ArrayList();
for(int i = 0; i < list.size(); i++)
Student stu = list.get(i);
if("c1".equals(stu.classId))
listC1.add(stu);
else if("c2".equals(stu.classId))
listC2.add(stu);
else if("c3".equals(stu.classId))
listC3.add(stu);
CountThread countThread1 = new CountThread(listC1);
countThread1.start();
CountThread countThread2 = new CountThread(listC2);
countThread2.start();
CountThread countThread3 = new CountThread(listC3);
countThread3.start();
class CountThread extends Thread
List<Student> list;
int sum = 0;
int meanScore = 0;
public CountThread(List<Student> list)
this.list = list;
@Override
public void run()
for(int i = 0;i < list.size();i++)
sum = sum + list.get(i).score;
meanScore = sum / list.size();
System.out.println("meanScore: " + meanScore);
class Student
int score;
String classId;
/**
* classId的枚举
*/
enum ClassIdEnum
C_1("c1",1),
C_2("c2",2),
C_3("c3",3);
private String code;
private int num;
ClassIdEnum(String code,int num)
this.code = code;
this.num = num;
public static String getCodeByNum(int num)
if(num == 1)
return C_1.code;
else if(num == 2)
return C_2.code;
else if(num == 3)
return C_3.code;
return null;
class ShowMeBug
/**
* 随机生成一个students, 它的size是15000
*/
private static List<Student> studentRandom()
Random random = new Random(1);
ArrayList<Student> list = new ArrayList();
for (int i = 0; i < 10; i++)
// score: 60 - 100
// classId: c1 c2 c3
// random: [0 - 40) + 60 = [60, 101)
Student stu = new Student();
stu.score = random.nextInt(40) + 61;
System.out.println(stu.score);
// [0 1 2] + 1 = [1 2 3]
int j = random.nextInt(3) + 1;
System.out.println(j);
String code = ClassIdEnum.getCodeByNum(j);
stu.classId = code;
list.add(stu);
return list;
public static void main(String[] args)
System.out.println("Hello World!");
List<Student> list = studentRandom();
Solution.solution(list);
以上是关于面试真题给定3个班级,班级id号分别为c1,c2,c3,随机生成一个List<Student> students,每个班级的score和classId均随机,输出每个班级里学生的平均成绩的主要内容,如果未能解决你的问题,请参考以下文章
少儿编程 电子学会图形化scratch编程等级考试一级真题答案解析(选择题)2021-3
python读取班级成绩 青少年编程电子学会python编程等级考试三级真题解析2020年9月
python读取班级成绩 青少年编程电子学会python编程等级考试三级真题解析2020年9月