package com.sf;

import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;

public class Test {

    public static void main(String[] args) {
        // 随机点名器
        //      txt文档中
        //  字符串中 “zhangsan、lisi、wangwu”
        //  输入一个要随机的数量   1 2
        //    随机出可能重复的同学名字
        //    随机出不重复的同学名字


        String str = "赵玉龙、闵圣楠、刘哲、李龚臻、张嫁祥、尹星博、李宏源、牛文睿、王佳强、胡春宇、郭柯雨、唐振亮、王鸿明、芦博智、张文瀚、张甫鑫、张宇璇、李小龙、王毅、孙智凡、孙超、殷碧泉、李斯扬、赵佳硕、杨晨、康雯博、孙辉、李天卓、牛世恒、卢星宇、黄天柯";
        String[] splitStr = str.split("、");
        System.out.println(splitStr.length);
//        System.out.println(Arrays.toString(splitStr));

        // 输入一个数字  来获取随机的数量
        System.out.println("请输出一个要随机的数量:");
        Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt();

        // 有效范围 [1,length]
        //   小于最小值  大于最大值
        //   重新输入  按照最小值和最大值处理
        if (num < 1) num = 1;
        else if (num > splitStr.length) num = splitStr.length;
        else if (num == splitStr.length) System.out.println(Arrays.toString(splitStr));
//        while (num < 1 || num > splitStr.length){
//            System.out.println("输入数值不符合范围, 请重新输入:");
//            num = scanner.nextInt();
//        }

        // 随机num个不重复的结果
        // 存储结果的容器: 数组、list、set
        //  set 用法最简单  随机的范围要在length中  随机的结果存在set中  循环遍历条件要判断set的大小
        //  list  用法相对简单  也比较多样
        //        contains()进行去重  循环遍历条件要判断list的大小
        //        随机一个移除一个  使用的是动态数组的特性
        //        Collections.shuffle()洗牌方法
        //  数组   随机一个向前覆盖  而且用了 Math.random()随机   其他Random.nextInt()

        // num = 5  随机的是索引 [0,30] 随机出5个不重复的
        //  arr = {0,0,0,0,0}  数组初始化的默认值  但是随机结果也有可能是0
        //  arr = {-1,-1,-1,-1,-1}
        //  arr = {2,-1,-1,-1,-1}
        //  arr = {2,3,-1,-1,-1}
        //  arr = {2,3,7,-1,-1}   有效元素的个数 size  数组中是否存在 contains  ArrayList的本质是动态数组

        int len = splitStr.length;
        int[] arr = new int[num];
        // 直接输出的是地址
        System.out.println(arr);
        System.out.println(Arrays.toString(arr));
        // itar  iter 循环的快捷键
        for (int i = 0; i < num; i++) {
            arr[i] = -1;
        }
        System.out.println(Arrays.toString(arr));

        // 记录有效元素的个数
        int count = 0;
        // 随机两种逻辑
        // 去重
        while (count < num) {
//            Random random = new Random();
//            int randomInt = random.nextInt(len);
//            System.out.println(randomInt);

            int mathRandom = (int)(Math.random() * len);
            System.out.println(mathRandom);
            // 判断是否在arr中存在
            // 不存在 才赋值 并添加count
            boolean isExists = false;
            for (int i = 0; i < num; i++) {
                if(arr[i] == mathRandom){
                    isExists = true;
                    break;
                }
            }
            if (!isExists){
                // 第一个元素  arr = {-1,-1,-1,-1,-1}
                // count = 0
                // 第二个元素  arr = {2,-1,-1,-1,-1}
                // count = 1
                // 类似于set
                arr[count] = mathRandom;
                count++;
            }
        }

        System.out.println(Arrays.toString(arr));

    }
}