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

末蓝、 2024-04-22 05:14 170阅读 0赞

随机点名器2:在本地文件中读取数据并实现随机点名,附带点到男生的概率为70%,点到女生的概率为30%,运行100万次结束后统计点名的占比是否接近7:3,文件数据由好名网提供,爬取代码传送门:https://blog.csdn.net/qq_69957794/article/details/135118537?spm=1001.2014.3001.5502

文件也可自行写入,实现班级随机点名。

  1. /*
  2. * 需求:实现随机点名
  3. * 从本地文件下读取数据实现随机点名
  4. * 格式:XXX-男-23
  5. * 运行效果:
  6. * 第1次点名:XXX
  7. * 第2次点名:XXX
  8. * 第3次点名:XXX
  9. * 男生与女生名字出现的比例为:7:3
  10. * */
  11. 代码实现:
  12. package RamdomRollCaller;
  13. import java.io.BufferedReader;
  14. import java.io.FileNotFoundException;
  15. import java.io.FileReader;
  16. import java.io.IOException;
  17. import java.util.*;
  18. /*
  19. * 需求:实现随机点名
  20. * 从本地文件下读取数据实现随机点名
  21. * 格式:XXX-男-23
  22. * 运行效果:
  23. * 第1次点名:XXX
  24. * 第2次点名:XXX
  25. * 第3次点名:XXX
  26. * 男生与女生名字出现的比例为:7:3
  27. * */
  28. public class RollCallerDemo2 {
  29. public static void main(String[] args) throws IOException {
  30. //创建对象关联本地文件
  31. BufferedReader br = new BufferedReader(new FileReader("name.txt"));
  32. //创建集合用来存储临时数据
  33. ArrayList<String> tempNameList = new ArrayList<>();
  34. String str = "";
  35. while ((str = br.readLine()) != null) {
  36. tempNameList.add(str);
  37. }
  38. //关流
  39. br.close();
  40. //存储男生名字
  41. ArrayList<String> boyList = new ArrayList<>();
  42. //存储女生名字
  43. ArrayList<String> girlList = new ArrayList<>();
  44. for (String s : tempNameList) {
  45. String[] arr = s.split("-");
  46. if (arr[1].equals("男")) {
  47. boyList.add(s);
  48. } else {
  49. girlList.add(s);
  50. }
  51. }
  52. //创建比重集合0表示女生,1表示男生
  53. ArrayList<Integer> weight = new ArrayList<>();
  54. Collections.addAll(weight, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1);
  55. //随机点名
  56. Random r = new Random();
  57. Scanner sc = new Scanner(System.in);
  58. System.out.println("请输入点名同学个数:");
  59. String tempCount = sc.nextLine();
  60. int count = Integer.parseInt(tempCount);
  61. //统计男生名字出现次数
  62. int boyCount = 0;
  63. //统计女生名字出现次数
  64. int girlCount = 0;
  65. int counter = 0;
  66. while (count-- != 0) {
  67. counter ++;
  68. int number = r.nextInt(10);
  69. int index = weight.get(number);
  70. if (index == 0) {
  71. Collections.shuffle(girlList);
  72. String[] arr = girlList.get(0).split("-");
  73. System.out.println("第"+counter+"次点名:"+arr[0]);
  74. girlCount++;
  75. } else {
  76. Collections.shuffle(boyList);
  77. String[] arr = boyList.get(0).split("-");
  78. System.out.println("第"+counter+"次点名:"+arr[0]);
  79. boyCount++;
  80. }
  81. }
  82. System.out.println("男生与女生名字出现比例为:"+boyCount+":"+girlCount);
  83. }
  84. }

运行结果:

0b78d26086f94dd8bdd6607229827f92.png

随机点名器实现方式第三种:https://blog.csdn.net/qq_69957794/article/details/135167702?spm=1001.2014.3001.5502

发表评论

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

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

相关阅读

    相关 Java实现随机点名

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

    相关 Java随机点名案例

    随机点名器,即在全班同学中随机的打印出一名同学的名字。 要做到随机点名,需要具备 ①存储所有的同学姓名 ②显示全班同学姓名 ③随机点名其中的一个人,打印到控制台。 需要涉及