java基础-IO流(随机点名器)

第一问:

复制代码
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();
    }
}
相关推荐
liu****2 小时前
深度学习简介
人工智能·python·深度学习·python基础
无垠的广袤2 小时前
【工业树莓派 CM0 NANO 单板计算机】基于舵机和人脸识别的智能门禁系统
linux·python·opencv·yolo·ai·树莓派
大学生毕业题目2 小时前
毕业项目推荐:102-基于yolov8/yolov5/yolo11的行人车辆检测识别系统(Python+卷积神经网络)
人工智能·python·yolo·目标检测·cnn·pyqt·行人车辆检测
古城小栈2 小时前
Cargo.toml
开发语言·后端·rust
心语星光2 小时前
用LibreOffice实现批量将pptx文件转换为pdf文件
开发语言·pdf·ppt
鱼蛋-Felix2 小时前
C#浮点数在部分国家解析失效问题
开发语言·unity·c#
brave_zhao2 小时前
launch4j亲测打包java的jar转为exe执行文件
java
嫂子的姐夫2 小时前
017-续集-贝壳登录(剩余三个参数)
爬虫·python·逆向
冰暮流星2 小时前
javascript数据类型转换-转换为数字型
开发语言·前端·javascript