|
@@ -0,0 +1,100 @@
|
|
|
|
+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));
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+}
|