简单的点名程序
刚刚入职有点无聊,就随性写了一个,目前测试无bug,有兴趣的同学可以拿去测试,测试数据比较少。
话不多说上代码
public static void main(String[] args) {
boolean over = false;
// 下标,记录第几轮抽取
int index = 1;
// 已经抽到过的学生的下标,会保存在set集合
Set set = new HashSet();
// 所有学生名单数组 有去重操作
List student = getStudent("a", "b", "c", "d", "e", "f");
// 获取键盘输入的 每次抽几个学生
int value = getScanValue("输入每次抽几个学生:");
for (int i = 0; i < student.size(); i++) {
// 如果size不等于0 同时取余数等于0 说明这一轮已经抽完
if (set.size() != 0 && set.size() % value == 0) {
System.out.print("第" + index + "轮学生抽完,按回车键继续,按1回车结束:");
over = isOver(student, set);
if (over) {
break;
}
// 抽完一轮 下标+1
index++;
}
String randomStudent = randomStudent(student, set);
System.out.println(randomStudent);
// 已经抽过的学生 放在set集合中
set.add(randomStudent);
}
if (!over) {
System.out.print("第" + index + "轮学生抽完,");
System.out.println("已经没有学生了!");
}
}
private static String randomStudent(List student, Set set) {
int size = student.size();
List<String> list = student;
// 如果学生数量大于40 同时已经有四分之三的学生被抽走 为了防止循环获取随机数次数太多 用剩余学生来抽取
if (student.size() > 40 && student.size() / 4 * 3 <= set.size()) {
list = new ArrayList<>(student);
list.removeAll(set);
size = list.size();
}
int random = (int) (Math.random() * size);
// 如果随机数已经存在 那么循环获取 直到不重复
while (set.contains(list.get(random))) {
random = (int) (Math.random() * size);
}
return list.get(random);
}
private static int getScanValue(String msg) {
int vlaue = 0;
Scanner scan = new Scanner(System.in);
System.out.print(msg);
try {
vlaue = Integer.parseInt(scan.next());
} catch (Exception e) {
// 递归调用 建议少用
return getScanValue("参数不合法!\n请重新输入:");
}
return vlaue <= 0 ? getScanValue("参数需要大于0哦!\n请重新输入:") : vlaue;
}
private static List getStudent(String... name) {
return Arrays.asList(name).stream().distinct().collect(Collectors.toList());
}
private static boolean isOver(List student, Set set) {
boolean isOver = new Scanner(System.in).nextLine().equals("1");
if (isOver) {
student.removeAll(set);
System.out.println("已结束,剩余学生数量:" + student.size() + "\n剩余名单" + student);
}
return isOver;
}
- 直接复制过去运行mian方法即可,注意abcd改成你需要的点名同学的名字
- 有兴趣的同学可以一起探讨!