题目:
TxT文件中事先准备好一些学生信息,每个学生的信息独占一行。,要求1:每次被点到的学生,再次被点到的概率在原先的基础上降低一半。
举例:80个学生,点名5次,每次都点到小A,概率变化情况如下:,第一次每人概率:1.25%。,第二次小A概率:0.625%。,其他学生概率:1.2579%,第三次小A概率:0.3125%。,其他学生概率:1.261867%,第四次小A概率:0.15625%。,其他学生概率:1.2638449%,第五次小A概率:0.078125%。,其他学生概率:1.26483386%,
提示:本题的核心就是带权重的随机
代码:
import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
public class Demo07 {
public static void main(String[] args) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new FileReader("D:\\javaSE\\java\\src\\IO\\Text\\b.txt"));
String len;
ArrayList<Students> list = new ArrayList<>();
while ((len=bufferedReader.readLine())!=null) {
String[] split = len.split("-");
Students students = new Students(split[0],split[1],Integer.parseInt(split[2]),Double.parseDouble(split[3]));
list.add(students);
}
bufferedReader.close();
//计算权重的总和
double weight=0;
for (Students students : list) {
weight=weight+students.getNumber();
}
System.out.println(weight);
//计算出每个人的权重
double[] doubles = new double[list.size()];
for (Students students : list) {
for (int i1 = 0; i1 < doubles.length; i1++) {
doubles[i1]=students.getNumber()/weight;
}
}
//计算每一人的权重占比
for (int i1 = 1; i1 < doubles.length; i1++) {
doubles[i1]=doubles[i1]+doubles[i1-1];
}
double random = Math.random();
int i1 = -Arrays.binarySearch(doubles, random)-1;
Students students = list.get(i1);//随机到的数
//减少概率
double v = students.getNumber() / 2;
students.setNumber(v);
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("D:\\javaSE\\java\\src\\IO\\Text\\b.txt"));
for (Students students1 : list) {
bufferedWriter.write(students1.toString());
bufferedWriter.newLine();
}
bufferedWriter.close();
}
}