Test.java 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. package com.sf;
  2. import java.util.Arrays;
  3. import java.util.Random;
  4. import java.util.Scanner;
  5. public class Test {
  6. public static void main(String[] args) {
  7. // 随机点名器
  8. // txt文档中
  9. // 字符串中 “zhangsan、lisi、wangwu”
  10. // 输入一个要随机的数量 1 2
  11. // 随机出可能重复的同学名字
  12. // 随机出不重复的同学名字
  13. String str = "赵玉龙、闵圣楠、刘哲、李龚臻、张嫁祥、尹星博、李宏源、牛文睿、王佳强、胡春宇、郭柯雨、唐振亮、王鸿明、芦博智、张文瀚、张甫鑫、张宇璇、李小龙、王毅、孙智凡、孙超、殷碧泉、李斯扬、赵佳硕、杨晨、康雯博、孙辉、李天卓、牛世恒、卢星宇、黄天柯";
  14. String[] splitStr = str.split("、");
  15. System.out.println(splitStr.length);
  16. // System.out.println(Arrays.toString(splitStr));
  17. // 输入一个数字 来获取随机的数量
  18. System.out.println("请输出一个要随机的数量:");
  19. Scanner scanner = new Scanner(System.in);
  20. int num = scanner.nextInt();
  21. // 有效范围 [1,length]
  22. // 小于最小值 大于最大值
  23. // 重新输入 按照最小值和最大值处理
  24. if (num < 1) num = 1;
  25. else if (num > splitStr.length) num = splitStr.length;
  26. else if (num == splitStr.length) System.out.println(Arrays.toString(splitStr));
  27. // while (num < 1 || num > splitStr.length){
  28. // System.out.println("输入数值不符合范围, 请重新输入:");
  29. // num = scanner.nextInt();
  30. // }
  31. // 随机num个不重复的结果
  32. // 存储结果的容器: 数组、list、set
  33. // set 用法最简单 随机的范围要在length中 随机的结果存在set中 循环遍历条件要判断set的大小
  34. // list 用法相对简单 也比较多样
  35. // contains()进行去重 循环遍历条件要判断list的大小
  36. // 随机一个移除一个 使用的是动态数组的特性
  37. // Collections.shuffle()洗牌方法
  38. // 数组 随机一个向前覆盖 而且用了 Math.random()随机 其他Random.nextInt()
  39. // num = 5 随机的是索引 [0,30] 随机出5个不重复的
  40. // arr = {0,0,0,0,0} 数组初始化的默认值 但是随机结果也有可能是0
  41. // arr = {-1,-1,-1,-1,-1}
  42. // arr = {2,-1,-1,-1,-1}
  43. // arr = {2,3,-1,-1,-1}
  44. // arr = {2,3,7,-1,-1} 有效元素的个数 size 数组中是否存在 contains ArrayList的本质是动态数组
  45. int len = splitStr.length;
  46. int[] arr = new int[num];
  47. // 直接输出的是地址
  48. System.out.println(arr);
  49. System.out.println(Arrays.toString(arr));
  50. // itar iter 循环的快捷键
  51. for (int i = 0; i < num; i++) {
  52. arr[i] = -1;
  53. }
  54. System.out.println(Arrays.toString(arr));
  55. // 记录有效元素的个数
  56. int count = 0;
  57. // 随机两种逻辑
  58. // 去重
  59. while (count < num) {
  60. // Random random = new Random();
  61. // int randomInt = random.nextInt(len);
  62. // System.out.println(randomInt);
  63. int mathRandom = (int)(Math.random() * len);
  64. System.out.println(mathRandom);
  65. // 判断是否在arr中存在
  66. // 不存在 才赋值 并添加count
  67. boolean isExists = false;
  68. for (int i = 0; i < num; i++) {
  69. if(arr[i] == mathRandom){
  70. isExists = true;
  71. break;
  72. }
  73. }
  74. if (!isExists){
  75. // 第一个元素 arr = {-1,-1,-1,-1,-1}
  76. // count = 0
  77. // 第二个元素 arr = {2,-1,-1,-1,-1}
  78. // count = 1
  79. // 类似于set
  80. arr[count] = mathRandom;
  81. count++;
  82. }
  83. }
  84. System.out.println(Arrays.toString(arr));
  85. }
  86. }