第一问:
package Day13_IO;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Random;
public class IOTest03 {
public static void main(String[] args) throws IOException {
//创建读取对象
ArrayList<String> list=new ArrayList<>();
BufferedReader br = new BufferedReader(new FileReader("E:\\java\\javase\\basic\\javadown\\test5.txt"));
//每次读一行
String s;
while((s=br.readLine())!=null){
list.add(s);
}
//随机读取数据
Random random=new Random();
int i = random.nextInt(list.size());
String name = list.get(i).split("-")[0];
System.out.println(name);
}
}
第二问:

package Day13_IO;
import java.io.*;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;
public class IOTest04 {
public static void main(String[] args) throws IOException {
//1、创建男生和女生集合
ArrayList<String> boyList = new ArrayList<>();
ArrayList<String> girlList = new ArrayList<>();
BufferedReader br = new BufferedReader(new FileReader("E:\\java\\javase\\basic\\javadown\\test5.txt"));
//把读取的数据分别存到男生集合和女生集合
String line;
while((line=br.readLine())!=null){
if(line.split("-")[1].equals("男")){
boyList.add(line);
}else {
girlList.add(line);
}
}
//开始抽数
int boyCount=0,girlCount=0;
for (int i = 0; i < 1000000; i++) {
Random random=new Random();
int boyRandomNumber = random.nextInt(boyList.size());
int girlRandomNumber = random.nextInt(girlList.size());
int number = getNumber();
if(number==1){
boyList.get(boyRandomNumber);
boyCount++;
}else{
girlList.get(girlRandomNumber);
girlCount++;
}
}
//循环完结束之后,计算boyCount和girlCount的占比
double j = Math.round((girlCount * 100) / 1000000.0);
double i = Math.round((boyCount * 100) / 1000000.0);
System.out.println("男孩的概率 "+String.format("%.2f", i)+"%");
System.out.println("女孩的概率 "+String.format("%.2f", j)+"%");
}
//定义一个方法,用来表示概率
public static int getNumber(){
ArrayList<Integer> number = new ArrayList<>();
Collections.addAll(number,1,1,1,1,1,1,1,0,0,0);//1:男生,0:女生
Random random = new Random();
int i = random.nextInt(number.size());
return number.get(i);
}
}

第三问:

package Day13_IO;
import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;
public class IOTest05 {
public static void main(String[] args) throws IOException {
//点名作弊器:程序执行三次后,必须点到张三
//1、先读取姓名文件,存到集合中
BufferedReader br = new BufferedReader(new FileReader("E:\\java\\javase\\basic\\javadown\\test5.txt"));
ArrayList<String> nameList = new ArrayList<>();
String str;
while((str=br.readLine())!=null){
nameList.add(str);
}
//2、读取存档文件
BufferedReader br4 = new BufferedReader(new FileReader("E:\\java\\javase\\basic\\javadown\\test4.txt"));
String s = br4.readLine();
int number = Integer.parseInt(s);
if(number==2){
System.out.println("张三");
}else{
//3、随机读取姓名
Collections.shuffle(nameList);
System.out.println(nameList.get(0));
number++;
//写入到存档文件
BufferedWriter bw = new BufferedWriter(new FileWriter("E:\\java\\javase\\basic\\javadown\\test4.txt"));
bw.write(String.valueOf(number));
bw.newLine();
bw.close();
}
br.close();
br4.close();
}
}
第四问:

package Day13_IO;
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.HashMap;
import java.util.Random;
public class IOTest06 {
public static void main(String[] args) throws IOException {
//读取本地文件
BufferedReader br = new BufferedReader(new FileReader("E:\\java\\javase\\basic\\javadown\\test5.txt"));
ArrayList<String> nameList = new ArrayList<>();
ArrayList<String> tempList = new ArrayList<>();
//姓名数据写入到nameList
String str;
while((str=br.readLine())!=null){
nameList.add(str);
}
int size = nameList.size();
for (int i1 = 1; i1 < 11; i1++) {
System.out.println("=========第"+i1+"轮=============");
for (int i = 0; i < size; i++) {
Random random = new Random();
int j = random.nextInt(nameList.size());
System.out.println(nameList.get(j));
String remove = nameList.remove(j);
tempList.add(remove);
}
nameList.addAll(tempList);
tempList.clear();
}
br.close();
}
}
第五问:

package Day13_IO;
import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
public class IOTest07 {
public static void main(String[] args) throws IOException {
//1、读取文件中的数据
BufferedReader br = new BufferedReader(new FileReader("E:\\java\\javase\\basic\\javadown\\test5.txt"));
//2、创建集合存储对象
ArrayList<Student> students = new ArrayList<>();
String line;
while((line=br.readLine())!=null){
String[] split = line.split("-");
Integer age = Integer.parseInt(split[2]);
Double weight = Double.parseDouble(split[3]);
Student student = new Student(split[0], split[1], age, weight);
students.add(student);
}
//3、计算总权重
double weightSum=0;
for (Student student : students) {
weightSum+=student.getWeight();
}
//4、计算每个学生的占比,并存起来
double[] arr=new double[students.size()];
int i=0;
for (Student student : students) {
arr[i]=student.getWeight()/weightSum;
i++;
}
//5、计算每一个人的权重占比范围
//[0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]
//结果应该是{0.0~0.1,0.1~0.2,0.2~0.3,0.3~0.4,0.4~0.5,0.5~0.6,0.7~0.8,0.9~1.0}
for (int j = 1; j < arr.length; j++) {
arr[j]=arr[j]+arr[j-1];
}
System.out.println(Arrays.toString(arr));
//6、随机抽取
//获取一个0.0~1.0的随机数
double number= Math.random();
System.out.println(number);
//二分查找法:Arrays.binarySearch
//如果要查找的数据不存在,会返回负的插入点减一。比如返回了-4,那么就代表着要插入的位置是3索引的位置
int index = Arrays.binarySearch(arr, number);
int result=-index-1;//拿到实际的位置
Student student = students.get(result);
System.out.println(student);
//获取到该学生的权重,并且修改权重,然后重新赋值给该学生
student.setWeight(student.getWeight()/2);
System.out.println(students);
//7、把集合中的数据重新写到文件中
BufferedWriter bw = new BufferedWriter(new FileWriter("E:\\java\\javase\\basic\\javadown\\test5.txt"));
for (Student eachStudent : students) {
String newResult = eachStudent.getName() +
"-" + eachStudent.getGender() +
"-" + eachStudent.getAge() +
"-" + eachStudent.getWeight();
bw.write(newResult);
bw.newLine();
}
bw.close();
br.close();
}
}
