parent
5e0bf40b68
commit
847e43793d
@ -0,0 +1,62 @@
|
||||
package com.example.classroomattendance.service;
|
||||
|
||||
import com.example.classroomattendance.model.Student;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
@Service
|
||||
public class StudentService {
|
||||
private List<Student> students = new ArrayList<>();
|
||||
private Random random = new Random();
|
||||
|
||||
public void addStudents(List<Student> studentList) {
|
||||
students.addAll(studentList);
|
||||
}
|
||||
|
||||
public Student pickRandomStudent() {
|
||||
if (students.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// 计算所有学生的总权重
|
||||
double totalWeight = 0;
|
||||
for (Student student : students) {
|
||||
totalWeight += getWeight(student);
|
||||
}
|
||||
|
||||
// 随机选择权重范围内的值
|
||||
double randomValue = random.nextDouble() * totalWeight;
|
||||
|
||||
// 选取符合该随机值的学生
|
||||
for (Student student : students) {
|
||||
randomValue -= getWeight(student);
|
||||
if (randomValue <= 0) {
|
||||
return student;
|
||||
}
|
||||
}
|
||||
|
||||
// 防止极端情况下返回最后一个学生
|
||||
return students.get(students.size() - 1);
|
||||
}
|
||||
|
||||
// 获取学生的权重,积分越高权重越低
|
||||
private double getWeight(Student student) {
|
||||
return 1.0 / (student.getPoints() + 1.0); // 防止分母为0
|
||||
}
|
||||
|
||||
public void updateStudentPoints(Long id, double points) {
|
||||
for (Student student : students) {
|
||||
if (student.getId().equals(id)) {
|
||||
student.setPoints(student.getPoints() + points);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public List<Student> getAllStudents() {
|
||||
return students;
|
||||
}
|
||||
}
|
Loading…
Reference in new issue