通过读取本地文件来实现随机点名器,一共四种实现方式,文件中的数据可以自行更改也可以通过爬取好名网的数据来制造假姓名,爬取代码:https://blog.csdn.net/qq_69957794/article/details/135118537?spm=1001.2014.3001.5502
随机点名器1:
/* * 需求:实现随机点名器 * 从本地文件下读取已经爬取好的男生女生姓名 * 格式:XXX-男-23 * 通过程序实现随机点名的功能 * 运行效果: * 第一次运行程序:随机同学姓名1(只显示名字) * 第二次运行程序:随机同学姓名2(只显示名字) * ... * */
代码实现:
package RamdomRollCaller;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
/*
* 需求:实现随机点名器
* 从本地文件下读取已经爬取好的男生女生姓名
* 格式:XXX-男-23
* 通过程序实现随机点名的功能
* 运行效果:
* 第一次运行程序:随机同学姓名1(只显示名字)
* 第二次运行程序:随机同学姓名2(只显示名字)
* ...
* */
public class RollCallerDemo1 {
public static void main(String[] args) throws IOException {
//创建对象关联本地文件name.txt
BufferedReader br = new BufferedReader(new FileReader("name.txt"));
//创建集合用于存取读到的数据,方便后续对数据的操作
ArrayList<String> nameTempList = new ArrayList<>();
String str = "";
while((str = br.readLine())!= null){
if(!str.equals("[]")){
nameTempList.add(str);
}
}
//关流
br.close();
//获取姓名
ArrayList<String> nameList = new ArrayList<>();
for (String tempName : nameTempList) {
String[] arr = tempName.split("-");
nameList.add(arr[0]);
}
//随机点名
Scanner sc = new Scanner(System.in);
System.out.println("请输入点名同学个数:");
String count = sc.nextLine();
int nameCount = Integer.parseInt(count);
//计数器,用来统计程序运行次数
int temp = 0;
while((nameCount--)!=0){
temp ++;
Collections.shuffle(nameList);
System.out.println("第"+temp+"次运行程序:随机同学姓名"+temp+"("+nameList.get(0)+")");
}
}
}
随机点名器2:
/* * 需求:实现随机点名 * 从本地文件下读取数据实现随机点名 * 格式:XXX-男-23 * 运行效果: * 第1次点名:XXX * 第2次点名:XXX * 第3次点名:XXX * 男生与女生名字出现的比例为:7:3 * */
代码实现:
package RamdomRollCaller;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.*;
/*
* 需求:实现随机点名
* 从本地文件下读取数据实现随机点名
* 格式:XXX-男-23
* 运行效果:
* 第1次点名:XXX
* 第2次点名:XXX
* 第3次点名:XXX
* 男生与女生名字出现的比例为:7:3
* */
public class RollCallerDemo2 {
public static void main(String[] args) throws IOException {
//创建对象关联本地文件
BufferedReader br = new BufferedReader(new FileReader("name.txt"));
//创建集合用来存储临时数据
ArrayList<String> tempNameList = new ArrayList<>();
String str = "";
while ((str = br.readLine()) != null) {
tempNameList.add(str);
}
//关流
br.close();
//存储男生名字
ArrayList<String> boyList = new ArrayList<>();
//存储女生名字
ArrayList<String> girlList = new ArrayList<>();
for (String s : tempNameList) {
String[] arr = s.split("-");
if (arr[1].equals("男")) {
boyList.add(s);
} else {
girlList.add(s);
}
}
//创建比重集合0表示女生,1表示男生
ArrayList<Integer> weight = new ArrayList<>();
Collections.addAll(weight, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1);
//随机点名
Random r = new Random();
Scanner sc = new Scanner(System.in);
System.out.println("请输入点名同学个数:");
String tempCount = sc.nextLine();
int count = Integer.parseInt(tempCount);
//统计男生名字出现次数
int boyCount = 0;
//统计女生名字出现次数
int girlCount = 0;
int counter = 0;
while (count-- != 0) {
counter ++;
int number = r.nextInt(10);
int index = weight.get(number);
if (index == 0) {
Collections.shuffle(girlList);
String[] arr = girlList.get(0).split("-");
System.out.println("第"+counter+"次点名:"+arr[0]);
girlCount++;
} else {
Collections.shuffle(boyList);
String[] arr = boyList.get(0).split("-");
System.out.println("第"+counter+"次点名:"+arr[0]);
boyCount++;
}
}
System.out.println("男生与女生名字出现比例为:"+boyCount+":"+girlCount);
}
}
随机点名器3:
/* * 需求: 一个文件夹里储存了班级同学的姓名,每个姓名占一行。 * 格式:XXX-男-23 * 要求通过程序实现随机点名器。 * 第三次必是张三 * 运行效果: * 第一次运行程序:随机同学姓名1 * 第二次运行程序:随机同学姓名2 * 第三次运行程序:张三 * */
代码实现:
package RamdomRollCaller;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class RollCallerDemo3 {
/*
* 需求: 一个文件夹里储存了班级同学的姓名,每个姓名占一行。
* 格式:XXX-男-23
* 要求通过程序实现随机点名器。
* 第三次必是张三
* 运行效果:
* 第一次运行程序:随机同学姓名1
* 第二次运行程序:随机同学姓名2
* 第三次运行程序:张三
* */
public static void main(String[] args) throws IOException {
//关联本地文件
BufferedReader br = new BufferedReader(new FileReader("name.txt"));
//创建集合存储文件数据
ArrayList<String> tempNameList = new ArrayList<>();
//读数据并存入集合
String str = "";
while((str = br.readLine()) != null){
tempNameList.add(str);
}
//关流
br.close();
//过滤出只含名字的数据
ArrayList<String> nameList = new ArrayList<>();
for (String tempName : tempNameList) {
String[] arr = tempName.split("-");
nameList.add(arr[0]);
}
//点名次数
System.out.println("请输入点名同学个数:");
Scanner sc = new Scanner(System.in);
String strCount = sc.nextLine();
int count = Integer.parseInt(strCount);
//作弊点名
System.out.println("请输入第三次出现同学的姓名:");
String name = sc.nextLine();
int temp = 0;
while(count-- != 0){
temp++;
if(temp == 3){
System.out.println("第"+temp+"次运行程序:随机同学姓名"+temp+":"+name);
continue;
}
Collections.shuffle(nameList);
System.out.println("第"+temp+"次运行程序:随机同学姓名"+temp+":"+nameList.get(0));
}
}
}
随机点名器4:
/* * 需求: * 一个文件里面储存满了班级同学的姓名,每个姓名占一行。 * 格式: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);
}
}
}
}
}