用java设计一个课堂随机点名程序。假设有两个班:1班33位同学,2班35位同学。老师提问时,输入班级,随机抽学号。要求:叫过的同学不能重复叫。当所有同学都被叫过一次之后,再重新开始新的一轮。
时间: 2024-10-06 18:02:23 浏览: 14
在Java中设计这样一个课堂随机点名程序,我们可以采用ArrayList和HashSet数据结构来实现。以下是简单的步骤:
1. **定义学生类Student**:
```java
import java.util.Random;
class Student {
private String name;
private int classId; // 1代表1班,2代表2班
public Student(String name, int classId) {
this.name = name;
this.classId = classId;
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Student student = (Student) obj;
return classId == student.classId && name.equals(student.name);
}
@Override
public int hashCode() {
return Objects.hash(classId, name);
}
}
```
2. **创建班级类ClassRoom**:
```java
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class Classroom {
private List<Student> students;
private Set<Integer> calledStudents;
public Classroom(int className, int maxStudents) {
students = new ArrayList<>();
for (int i = 0; i < maxStudents; i++) {
students.add(new Student("Student" + i, className));
}
calledStudents = new HashSet<>();
}
public void callRandomStudent() {
if (!calledStudents.isEmpty()) {
calledStudents.clear();
}
Random rand = new Random();
while (true) {
int index = rand.nextInt(students.size());
Student student = students.get(index);
if (!calledStudents.contains(index)) {
System.out.println("随机点了 " + student.getName() + " (" + student.getClassId() + ")");
calledStudents.add(index);
break;
}
}
}
}
```
3. **主函数示例**:
```java
public static void main(String[] args) {
Classroom classroom1 = new Classroom(1, 33);
Classroom classroom2 = new Classroom(2, 35);
while (true) {
System.out.println("\n现在开始新一轮随机点名:");
classroom1.callRandomStudent();
classroom2.callRandomStudent();
if (classroom1.calledStudents.size() == 33 && classroom2.calledStudents.size() == 35) {
System.out.println("所有同学都点了一遍,重新开始新一轮...");
} else {
break;
}
}
}
```
这个程序会不断随机点名,直到每个班级的所有同学都被叫过一次,然后会重新开始新的一轮。