1.15.综合练习2-带有概率的随机点名

题目二:

分析:

提到概率,其中包含了随机,随机通常与Random类有关,但本例中Random类不能直接用,因为Random类生成的随机数是随机点,比如在1到20中随机抽取一个数,此时随机抽取到13,这里的13表示的是数字13即随机点,而概率是随机面,在本题中要的是随机面:

要想解决本例中随机面即概率的问题,可以在集合中添加7个1和3个0(总共就是10个数),此时7个1在集合中占70%,3个0在集合中占30%,然后可以把集合中的1和0都打乱顺序,再从这个集合中抽1或0,此时抽中1的概率为70%,抽中0的概率为30%

->如果抽中了1,就在存储男生的集合里随机抽取一个男生姓名;如果抽中了0,就在存储女生的集合里随机抽取一个女生姓名

->此时抽中男生的概率为70%,抽中女生的概率为30%。

注:题目的要求是70%的概率随机到男生,30%的概率随机到女生,这里概率针对的是男生和女生,和男生、女生的姓名无关,因此在满足题目要求下对男生、女生的姓名进行随机抽取是不影响本题的

解答:

对于第四步从list集合中随机抽取0或者1,由于每一个索引上抽中1的概率都为70%,抽中0的概率都为30%,所以随机抽取一个索引是可以的:

package com.itheima.a06test;
​
import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;
​
public class Test2 {
    public static void main(String[] args) {
        Random r = new Random();
        //1.创建集合,存储0和1,用于表示概率
        ArrayList<Integer> list=new ArrayList<>();
​
        //2.添加数据
        Collections.addAll(list,1,1,1,1,1,1,1);
        Collections.addAll(list,0,0,0);
​
        //3.打乱集合中的数据
        Collections.shuffle(list);
​
        //4.从list集合中随机抽取0或者1
        int index = r.nextInt(list.size());
        int number = list.get(index);
        System.out.println(number);
​
        //5.创建两个集合分别存储男生和女生的名字
        ArrayList<String> boyList=new ArrayList<>();
        ArrayList<String> girlList=new ArrayList<>();
​
        //6.添加学生
        Collections.addAll(boyList,"范闲", "范建", "范统", "杜子腾",  "宋合泛", "侯笼藤", "朱益群", "朱穆朗玛峰"); //男生
        Collections.addAll(girlList,"杜琦燕", "袁明媛","李猜","田蜜蜜"); //女生
​
        //7.判断此时是从boyList集合中抽取还是从girlList集合中抽取
        if(number==1){
            //从boyList集合中抽取
            int boyIndex = r.nextInt(boyList.size());
            String name = boyList.get(boyIndex);
            System.out.println(name);
        } else if (number == 0) {
            //从girlList集合中抽取
            int girlIndex = r.nextInt(girlList.size());
            String name = girlList.get(girlIndex);
            System.out.println(name);
        }
    }
}

注:上述代码中因为boyList.get(boyIndex)和girlList.get(girlIndex)不一样,所以 boyList.get(boyIndex)和girlList.get(girlIndex)可以赋值给同一个变量名即本代码里的name。

对于第四步从list集合中随机抽取0或者1,也可以不使用随机索引的方法,因为存储0和1的list集合已经被打乱,满足了抽中1的概率为70%,抽中0的概率为30%,因此这里固定获取list集合某一索引如0索的元素是可以的,理由是每一个索引上抽中1的概率都为70%,抽中0的概率都为30%:

package typeOfTest;
​
import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;
​
public class Test4 {
    public static void main(String[] args) {
        Random r = new Random();
        //1.创建集合,存储0和1,用于表示概率
        ArrayList<Integer> list=new ArrayList<>();
​
        //2.添加数据
        Collections.addAll(list,1,1,1,1,1,1,1);
        Collections.addAll(list,0,0,0);
​
        //3.打乱集合中的数据
        Collections.shuffle(list);
​
        //4.从list集合中固定获取某一索引如0索引上的元素
        /*由于存储0和1的list集合已经被打乱,满足了抽中1的概率为70%,抽中0的概率为30%,
          因此这里固定获取list集合某一索引如0索引的元素也是可以的,
          因为每一个索引上抽中1的概率都为70%,抽中0的概率都为30%*/
        int number = list.get(0);
        System.out.println(number);
​
        //5.创建两个集合分别存储男生和女生的名字
        ArrayList<String> boyList=new ArrayList<>();
        ArrayList<String> girlList=new ArrayList<>();
​
        //6.添加学生
        Collections.addAll(boyList,"范闲", "范建", "范统", "杜子腾",  "宋合泛", "侯笼藤", "朱益群", "朱穆朗玛峰"); //男生
        Collections.addAll(girlList,"杜琦燕", "袁明媛","李猜","田蜜蜜"); //女生
​
        //7.判断此时是从boyList集合中抽取还是从girlList集合中抽取
        if(number==1){
            //从boyList集合中抽取
            int boyIndex = r.nextInt(boyList.size());
            String name = boyList.get(boyIndex);
            System.out.println(name);
        } else if (number == 0) {
            //从girlList集合中抽取
            int girlIndex = r.nextInt(girlList.size());
            String name = girlList.get(girlIndex);
            System.out.println(name);
        }
    }
}
​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值