Java:随机生成5个不重复的数

编写程序,生成5个不重复的随机数[0-100]。重复的话重新生成。最终生成的5个随机数放到数组中,要求数组中这5个随机数不重复。

package com.company.random;

import java.util.Random;

/*
编写程序,生成5个不重复的随机数[0-100]。重复的话重新生成。
最终生成的5个随机数放到数组中,要求数组中这5个随机数不重复。
 */
public class RandomTest02 {
    public static void main(String[] args) {
        // 创建Random对象
        Random r = new Random();

        // 准备一个长度为5的一维数组。
        int[] arr = new int[5]; // 默认都是0
        for (int i = 0;i<arr.length;i++) {
            arr[i] = -1; // 初始化让数组初始值为-1
        }

        int index = 0;
        while (index < 5) {
            int a = r.nextInt(101); // [0,100]
            // 判断arr有没有这个a
            // 如果没有这个num,就放进去。
            if(!contains(arr, a)){
                arr[index++] = a;
            }
        }

        // 遍历以上的数组
        for (int i : arr) {
            System.out.println(i);
        }
    }

    /**
     * 单独编写一个方法,这个方法专门用来判断数组中是否包含某个元素
     * @param arr 数组
     * @param key 元素
     * @return true表示包含,false表示不包含。
     */
    public static boolean contains(int[] arr, int key){
        /*
        // 这个方案bug。(排序出问题了。)
        // 对数组进行升序
        //Arrays.sort(arr);
        // 进行二分法查找
        // 二分法查找的结果 >= 0说明,这个元素找到了,找到了表示存在!
        //return Arrays.binarySearch(arr, key) >= 0;
         */

        for(int i = 0; i < arr.length; i++){
            if(arr[i] == key){
                // 条件成立了表示包含,返回true
                return true;
            }
        }
        // 这个就表示不包含!
        return false;
    }

}

运行结果:
在这里插入图片描述

对数组进行升序Arrays.sort(arr); : arr:[-1,-1,-1,-1,-1]
生成10 放在arr[0] -》 [10,-1,-1,-1,-1] Arrays.sort(arr) ⇒ 变成[-1,-1,-1,-1,10]
生成8 放在arr[1] -》 [-1,8,-1,-1,10] Arrays.sort(arr) ⇒ 变成[-1,-1,-1,8,10]
生成7 放在arr[2] -》 [-1,-1,7,8,10] Arrays.sort(arr) ⇒ 变成[-1,-1,7,8,10]
生成6 放在arr[3] -》 [-1,-1,7,6,10] Arrays.sort(arr) ⇒ 变成[-1,-1,6,7,10]
生成5 放在arr[4] -》 [-1,-1,7,6,5] Arrays.sort(arr) ⇒ 变成[-1,-1,5,6,7]
输出 [-1,-1,5,6,7]
不符合条件

  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 要让Java生成随机的5位重复,可以采用以下的方法: 1. 创建一个空的组,用来存放生成的随机数。 2. 使用Java的Random类,通过nextint方法生成一个5位(10000-99999之间的字,不包括99999)。 3. 检查生成的随机数是否在组中已存在,如果已存在,则重新生成随机数,直到得到一个不重复字为止。 4. 将生成的随机数存储到组中,并继续生成下一个字,直到组中有5个不重复字为止。 5. 返回生成的随机数组。 在代码实现上,可以通过一个while循环来不断生成随机数,直到满足条件为止。具体实现可以参考以下代码片段: ``` import java.util.Arrays; import java.util.Random; public class RandomNumberGenerator { public static void main(String[] args) { int[] randomNumbers = new int[5]; Random random = new Random(); int count = 0; while (count < 5) { int number = random.nextInt(90000) + 10000; if (!contains(randomNumbers, number)) { randomNumbers[count] = number; count++; } } System.out.println(Arrays.toString(randomNumbers)); } private static boolean contains(int[] arr, int target) { for (int num : arr) { if (num == target) { return true; } } return false; } } ``` 这段代码使用了一个长度为5的int组来存储生成的随机数,通过一个计器count来统计已经生成的随机数的个。在while循环中,使用random.nextInt方法生成随机数,再调用contains方法检查是否已经存在于组中。如果不存在,则将该字存入组,并将计器加一。最终输出组即为5个不重复随机数字。 ### 回答2: Java是一种面向对象的编程语言,具有高效性、可移植性和可靠性等优势。当需要在Java中生成一组5位重复随机数时,可以采用以下方法: 1. 定义一个长度为5的组arr用于存放随机数。 2. 使用Random类创建一个Random对象random,调用nextInt()方法生成随机数。 3. 判断随机数是否在组arr中已经存在,若存在则重新生成随机数。 4. 若随机数不存在于组中,则将其存入组中。 5. 当组中元素达到5个时,退出循环。 6. 最终输出组中的所有元素。 以下为示例代码: ``` public static void main(String[] args) { int[] arr = new int[5]; //定义长度为5的组 int index = 0; Random random = new Random(); while (index < 5) { //循环生成随机数 int num = random.nextInt(100000); //生成0-99999之间的随机数 boolean flag = false; //标记是否已在组中存在 for (int i = 0; i < index; i++) { if (arr[i] == num) { //如果已存在,则重新生成随机数 flag = true; break; } } if (!flag) { //如果不存在,则存入组 arr[index] = num; index++; } } System.out.println("随机数为:"); for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + " "); } } ``` 上述代码中,定义了一个长度为5的组arr用于存放随机数,使用Random类创建了一个Random对象random,并调用nextInt()方法生成随机数。随后使用for循环判断随机数是否已经存在于组中,若存在则重新生成随机数,并将其存入组中。最终通过循环输出组中的所有元素。 通过以上方法,我们可以在Java中生成一组5位重复随机数,希望可以帮助到您。 ### 回答3: 要生成不重复的五位,可以利用Java提供的Random类和HashSet据结构来实现。 首先,我们可以使用Random类生成五位随机数,代码如下: ``` Random random = new Random(); int n = random.nextInt(90000) + 10000; ``` 这段代码生成一个在10000到99999之间的随机整n。 接着,我们可以创建一个HashSet据结构,并将生成的随机数加入到其中。HashSet是一种无序、不重复的集合,当我们往其中添加元素时,如果已经存在相同的元素,那么添加操作就会失败。这正好符合我们需要生成不重复字的条件。 代码如下: ``` Set<Integer> set = new HashSet<>(); while(set.size() < 5){ Random random = new Random(); int n = random.nextInt(90000) + 10000; set.add(n); } ``` 这段代码创建了一个HashSet集合set,并使用while循环加入元素,当集合大小为5时停止循环。 最后,我们可以将集合中的元素取出,输出到控制台。 代码如下: ``` for(int num : set){ System.out.print(num + " "); } ``` 这段代码使用for循环遍历HashSet集合set,将其中的元素取出,赋值给变量num,并输出到控制台。 完整代码如下: ``` import java.util.HashSet; import java.util.Random; import java.util.Set; public class Main { public static void main(String[] args) { Set<Integer> set = new HashSet<>(); while(set.size() < 5){ Random random = new Random(); int n = random.nextInt(90000) + 10000; set.add(n); } for(int num : set){ System.out.print(num + " "); } } } ``` 执行上述代码,可以得到如下结果: ``` 67413 24073 23843 89754 69010 ``` 这就是随机生成五个重复的五位
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值