Java实现随机点名器的四种方式(第四种)

客官°小女子只卖身不卖艺 2024-04-22 05:19 162阅读 0赞

随机点名器4:在本地文件中读取数据实现随机点名,点到的同学不会再次被点到,当班级所有人都被点完时开启下一轮的点名。文件数据由好名网提供,爬取好名网姓名代码:https://blog.csdn.net/qq_69957794/article/details/135118537?spm=1001.2014.3001.5502

文件也可以自行写入实现班级点名。

  1. /*
  2. * 需求:
  3. * 一个文件里面储存满了班级同学的姓名,每个姓名占一行。
  4. * 格式:XXX-男-23
  5. * 要求通过程序实现随机点名。
  6. * 运行效果:
  7. * 被点到的同学不会再被点到
  8. * 如果班级中的同学都点完了,需要自动开启第二轮点名
  9. * 细节1:假设班级有5名同学,每轮中的每一位同学只能被点到一次,程序运行五次,第一轮点名结束。
  10. * 细节2:第6次运行的时候,我们自己不需要手动操作本地文件,要求程序自动开启第二轮点名。
  11. * */
  12. 代码实现:
  13. package RamdomRollCaller;
  14. import java.io.*;
  15. import java.util.*;
  16. public class RollCallerDemo4 {
  17. public static void main(String[] args) throws IOException {
  18. /*
  19. * 需求:
  20. * 一个文件里面储存满了班级同学的姓名,每个姓名占一行。
  21. * 格式:XXX-男-23
  22. * 要求通过程序实现随机点名。
  23. * 运行效果:
  24. * 被点到的同学不会再被点到
  25. * 如果班级中的同学都点完了,需要自动开启第二轮点名
  26. * 细节1:假设班级有5名同学,每轮中的每一位同学只能被点到一次,程序运行五次,第一轮点名结束。
  27. * 细节2:第6次运行的时候,我们自己不需要手动操作本地文件,要求程序自动开启第二轮点名。
  28. * */
  29. //给出文件的路径
  30. File file = new File("b.txt");
  31. //调用方法随机点名学生
  32. rollCaller(file);
  33. }
  34. public static void rollCaller(File src) throws IOException {
  35. //关联本地文件
  36. BufferedReader br = new BufferedReader(new FileReader(src));
  37. //用来临时存储数据
  38. ArrayList<String> tempNameList = new ArrayList<>();
  39. //读数据
  40. String str = "";
  41. while ((str = br.readLine()) != null) {
  42. tempNameList.add(str);
  43. }
  44. //关流
  45. br.close();
  46. //定义栈来操作数据
  47. Stack<String> stack1 = new Stack<>();
  48. //定义第三方存储工具next集合
  49. ArrayList<String> next = new ArrayList<>();
  50. //把姓名数据放到栈中
  51. for (String tempName : tempNameList) {
  52. String[] arr = tempName.split("-");
  53. stack1.push(arr[0]);
  54. }
  55. //开始随机点名
  56. Scanner sc = new Scanner(System.in);
  57. System.out.println("请输入点名同学个数:");
  58. String strName = sc.nextLine();
  59. int nameCount = Integer.parseInt(strName);
  60. int count = 0;
  61. while(nameCount-- != 0){
  62. count++;
  63. //打乱数据
  64. Collections.shuffle(stack1);
  65. String name = stack1.get(stack1.size() - 1);
  66. System.out.println("第"+count+"次运行程序:随机同学姓名"+count+":"+name);
  67. //被点到的名字出栈并添加到临时集合中
  68. String pop = stack1.pop();
  69. next.add(pop);
  70. //判断
  71. if(stack1.isEmpty()){
  72. //如何栈为空表示第一轮点名结束,开始第二轮点名
  73. System.out.println("-----下一轮点名开始-----");
  74. for (String nextName : next) {
  75. //刷新栈中的数据
  76. stack1.push(nextName);
  77. }
  78. }
  79. }
  80. }
  81. }

运行结果:

6c36a52dd4a84395bed0380fc60f3fd5.png

发表评论

表情:
评论列表 (有 0 条评论,162人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Java实现随机点名

    细节1:假设班级有5名同学,每轮中的每一位同学只能被点到一次,程序运行五次,第一轮点名结束。* 细节2:第6次运行的时候,我们自己不需要手动操作本地文件,要求...