已知某学校有n名教师,学校有m名学生,学校搞学生民意调查,每一位学生为每一位老师都打分,学生所打的所有的分数都集中到一个数组中。数据存放规律是,前m个数据是对1号老师的打分,接下来m个数据是对2号老师的打分,以此类推。请设计一个多线程的算法,计算出每一位老师的总打分。用java语言实现
时间: 2024-03-15 14:41:41 浏览: 48
以下是Java语言的多线程算法实现,可以计算每位老师的总打分:
```java
public class TeacherScore {
private static int[] scores; // 所有学生的打分数组
private static int n; // 教师数
private static int m; // 学生数
public static void main(String[] args) {
n = 5; // 假设有5名教师
m = 10; // 假设有10名学生
scores = new int[m * n]; // 分数数组长度为学生数乘以教师数
// 假设所有学生都给所有老师打了10分
for (int i = 0; i < scores.length; i++) {
scores[i] = 10;
}
// 创建n个教师线程
Thread[] threads = new Thread[n];
for (int i = 0; i < n; i++) {
final int teacherId = i + 1; // 教师编号从1开始
threads[i] = new Thread(new Runnable() {
@Override
public void run() {
int sum = 0;
for (int j = 0; j < m; j++) {
sum += scores[teacherId - 1 + j * n];
}
System.out.println("Teacher " + teacherId + " score: " + sum);
}
});
threads[i].start();
}
// 等待所有教师线程执行完毕
for (int i = 0; i < n; i++) {
try {
threads[i].join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
```
首先,我们定义了一个长度为m*n的scores数组,存放所有学生的打分。然后,创建了n个教师线程,每个线程负责计算一个教师的总分。在每个教师线程中,使用循环遍历该教师对应的分数,并累加总分。最后,输出每个教师的总分。使用join方法等待所有教师线程执行完毕后,程序结束。