1、
public class Test {
public static void main(String[] args) throws IOException {
/*需求:
需求:
有一个文件里面存储了班级同学的信息,每一个信息占一行。
格式为:张三-男-23
要求通过程序实现随机点名器。
运行效果:
第一次运行程序:随机同学姓名1(只显示名字)
第二次运行程序:随机同学姓名2(只显示名字)
第三次运行程序:随机同学姓名3(只显示名字)
…
*/
//1.读取文件中学生的姓名
ArrayList<String> list = new ArrayList<>();
BufferedReader br = new BufferedReader(new FileReader("myiotest\\src\\com\\itheima\\myiotest2\\names.txt"));
String line;
while ((line = br.readLine()) != null){
list.add(line);
}
br.close();
//2.随机抽取(解法一)
Random r = new Random();
int index = r.nextInt(list.size());
String randomName1 = list.get(index);
String[] arr1 = randomName1.split("-");
System.out.println(arr1[0]);
//2.随机抽取(解法二)
Collections.shuffle(list);
String randomName2 = list.get(0);
String[] arr2 = randomName2.split("-");
System.out.println(arr2[0]);
}
2、
public class Test {
public static void main(String[] args) throws IOException {
/*需求:
一个文件里面存储了班级同学的信息,格式为:张三-男-23
每一个学生信息占一行。
要求通过程序实现随机点名器。
70%的概率随机到男生
30%的概率随机到女生
随机100万次,统计结果。看生成男生和女生的比例是不是接近于7:3
*/
//1.读取数据,并把男生和女生的信息添加到不同的集合当中
ArrayList<String> boyNameList = new ArrayList<>();
ArrayList<String> girlNameList = new ArrayList<>();
BufferedReader br = new BufferedReader(new FileReader("myiotest\\src\\com\\itheima\\myiotest3\\names.txt"));
String line;
while ((line = br.readLine()) != null){
String[] arr = line.split("-");
if(arr[1].equals("男")){
boyNameList.add(line);
}else{
girlNameList.add(line);
}
}
br.close();
//2.定义权重集合,男女比例:7:3
ArrayList<Integer> list = new ArrayList<>();
Collections.addAll(list,1,1,1,1,1,1,1,0,0,0);
//3.定义变量,统计被点到的次数
int boyCount = 0;
int girlCount = 0;
Random r = new Random();
//4.循环100万次
for (int i = 0; i < 1000000; i++) {
//5.从权重集合中获取随机数据
int index = r.nextInt(list.size());
int weight = list.get(index);
//6.判断获取的随机数据是1还是0
if(weight == 1){
//1就随机男生
Collections.shuffle(boyNameList);
String boyInfo = boyNameList.get(0);
System.out.println(boyInfo);
boyCount++;
}else{
//0就随机女生
Collections.shuffle(girlNameList);
String girlInfo = girlNameList.get(0);
System.out.println(girlInfo);
girlCount++;
}
}
System.out.println("随机抽取100万次,其中男生被抽到了" + boyCount);
System.out.println("随机抽取100万次,其中女生被抽到了" + girlCount);
}
}
3、
public class Test {
public static void main(String[] args) throws IOException {
/*需求:
一个文件里面存储了班级同学的姓名,每一个姓名占一行。
要求通过程序实现随机点名器。
第三次必定是张三同学
运行效果:
第一次运行程序:随机同学姓名1
第二次运行程序:随机同学姓名2
第三次运行程序:张三
…
*/
//1.读取数据,并把学生信息添加到集合当中
ArrayList<String> list = new ArrayList<>();
BufferedReader br1 = new BufferedReader(new FileReader("myiotest\\src\\com\\itheima\\myiotest4\\names.txt"));
String line;
while ((line = br1.readLine()) != null){
list.add(line);
}
br1.close();
//2.读取当前程序已经运行的次数
BufferedReader br2 = new BufferedReader(new FileReader("myiotest\\src\\com\\itheima\\myiotest4\\count.txt"));
String countStr = br2.readLine();
int count = Integer.parseInt(countStr);
br2.close();
//4.表示程序再次运行了一次
count++;
//3.判断,如果当前已经是第三次,直接打印,不是第三次才随机
if(count == 3){
System.out.println("张三");
}else {
Collections.shuffle(list);
String stuInfo = list.get(0);
System.out.println(stuInfo);
}
//4.将程序已经运行的次数写会本地文件
BufferedWriter bw = new BufferedWriter(new FileWriter("myiotest\\src\\com\\itheima\\myiotest4\\count.txt"));
bw.write(count + "");
bw.close();
}
}
4、
import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
public class Test {
public static void main(String[] args) throws IOException {
/*需求:
一个文件里面存储了班级同学的姓名,每一个姓名占一行。
要求通过程序实现随机点名器。
运行结果要求:
被点到的学生不会再被点到。
但是如果班级中所有的学生都点完了, 需要重新开启第二轮点名。
核心思想:
点一个删一个,把删除的备份,全部点完时还原数据。
*/
//1.定义变量,表示初始文件路径,文件中存储所有的学生信息
String src = "myiotest\\src\\com\\itheima\\myiotest5\\names.txt";
//2.定义变量,表示备份文件,一开始文件为空
String backups = "myiotest\\src\\com\\itheima\\myiotest5\\backups.txt";
//3.读取初始文件中的数据,并把学生信息添加到集合当中
ArrayList<String> list = readFile(src);
//4.判断集合中是否有数据
if (list.size() == 0) {
//5.如果没有数据,表示所有学生已经点完,从backups.txt中还原数据即可
//还原数据需要以下步骤:
//5.1 读取备份文件中所有的数据
list = readFile(backups);
//5.2 把所有的数据写到初始文件中
writeFile(src, list, false);
//5.3 删除备份文件
new File(backups).delete();
}
//5.集合中有数据,表示还没有点完,点一个删一个,把删除的备份到backups.txt当中
//打乱集合
Collections.shuffle(list);
//获取0索引的学生信息并删除
String stuInfo = list.remove(0);
//打印随机到的学生信息
System.out.println("当前被点到的学生为:" + stuInfo);
//把删除之后的所有学生信息,写到初始文件中
writeFile(src, list, false);
//把删除的学生信息备份(追加写入)
writeFile(backups, stuInfo, true);
}
private static void writeFile(String pathFile, ArrayList<String> list, boolean isAppend) throws IOException {
BufferedWriter bw = new BufferedWriter(new FileWriter(pathFile, isAppend));
for (String str : list) {
bw.write(str);
bw.newLine();
}
bw.close();
}
private static void writeFile(String pathFile, String str, boolean isAppend) throws IOException {
BufferedWriter bw = new BufferedWriter(new FileWriter(pathFile, isAppend));
bw.write(str);
bw.newLine();
bw.close();
}
private static ArrayList<String> readFile(String pathFile) throws IOException {
ArrayList<String> list = new ArrayList<>();
BufferedReader br = new BufferedReader(new FileReader(pathFile));
String line;
while ((line = br.readLine()) != null) {
list.add(line);
}
br.close();
return list;
}
}