随机点名器4:在本地文件中读取数据实现随机点名,点到的同学不会再次被点到,当班级所有人都被点完时开启下一轮的点名。文件数据由好名网提供,爬取好名网姓名代码:https://blog.youkuaiyun.com/qq_69957794/article/details/135118537?spm=1001.2014.3001.5502
文件也可以自行写入实现班级点名。
/* * 需求: * 一个文件里面储存满了班级同学的姓名,每个姓名占一行。 * 格式:XXX-男-23 * 要求通过程序实现随机点名。 * 运行效果: * 被点到的同学不会再被点到 * 如果班级中的同学都点完了,需要自动开启第二轮点名 * 细节1:假设班级有5名同学,每轮中的每一位同学只能被点到一次,程序运行五次,第一轮点名结束。 * 细节2:第6次运行的时候,我们自己不需要手动操作本地文件,要求程序自动开启第二轮点名。 * */
代码实现:
package RamdomRollCaller;
import java.io.*;
import java.util.*;
public class RollCallerDemo4 {
public static void main(String[] args) throws IOException {
/*
* 需求:
* 一个文件里面储存满了班级同学的姓名,每个姓名占一行。
* 格式:XXX-男-23
* 要求通过程序实现随机点名。
* 运行效果:
* 被点到的同学不会再被点到
* 如果班级中的同学都点完了,需要自动开启第二轮点名
* 细节1:假设班级有5名同学,每轮中的每一位同学只能被点到一次,程序运行五次,第一轮点名结束。
* 细节2:第6次运行的时候,我们自己不需要手动操作本地文件,要求程序自动开启第二轮点名。
* */
//给出文件的路径
File file = new File("b.txt");
//调用方法随机点名学生
rollCaller(file);
}
public static void rollCaller(File src) throws IOException {
//关联本地文件
BufferedReader br = new BufferedReader(new FileReader(src));
//用来临时存储数据
ArrayList<String> tempNameList = new ArrayList<>();
//读数据
String str = "";
while ((str = br.readLine()) != null) {
tempNameList.add(str);
}
//关流
br.close();
//定义栈来操作数据
Stack<String> stack1 = new Stack<>();
//定义第三方存储工具next集合
ArrayList<String> next = new ArrayList<>();
//把姓名数据放到栈中
for (String tempName : tempNameList) {
String[] arr = tempName.split("-");
stack1.push(arr[0]);
}
//开始随机点名
Scanner sc = new Scanner(System.in);
System.out.println("请输入点名同学个数:");
String strName = sc.nextLine();
int nameCount = Integer.parseInt(strName);
int count = 0;
while(nameCount-- != 0){
count++;
//打乱数据
Collections.shuffle(stack1);
String name = stack1.get(stack1.size() - 1);
System.out.println("第"+count+"次运行程序:随机同学姓名"+count+":"+name);
//被点到的名字出栈并添加到临时集合中
String pop = stack1.pop();
next.add(pop);
//判断
if(stack1.isEmpty()){
//如何栈为空表示第一轮点名结束,开始第二轮点名
System.out.println("-----下一轮点名开始-----");
for (String nextName : next) {
//刷新栈中的数据
stack1.push(nextName);
}
}
}
}
}
运行结果: