JavaSE 之 多个非重随机数生成

本文探讨了在Java中生成不重复随机数并将其填充到数组的方法。通过两种不同的实现方式,展示了如何避免生成重复的随机数,包括使用循环和条件判断以及改进的随机数生成策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

题目见 B站 av93347594 149P

 

实现功能:

生成5个不重复的随机数, 将它们放进一个数组中

 

我最后完成的代码:

import java.util.Random;

public class GenRandom {
    public static void main(String[] args) {
        int[] a = new int[5];
        int i = 0;
        Random r = new Random();


//        while (i < a.length) {
//            int temp = r.nextInt(5);
//            int j = 0;
//            while (j < i) {
//                if (temp == a[j]) {
//                    temp = r.nextInt(5);
//                    System.out.println("重新生成一次随机数");
//                }
//                j++;
//            }
//            a[i++] = temp;
//        }
        while (i < a.length) {
            int toInsert = r.nextInt(6);
            int[] tempa = new int[i+1];
            System.arraycopy(a,0,tempa,0,tempa.length);
            while (containsEle(tempa,tempa.length,toInsert)) {
                toInsert = r.nextInt(6);
                System.out.println("执行一次随机数生成");
            }
            a[i++] = toInsert;
            System.out.println("执行一次写入");
        }

        for (int ele:a){
            System.out.println(ele);
        }


    }

    static boolean containsEle(int[] a,int length, int b) {
        for (int i = 0; i < length; i++) {
            if (b == a[i]) return true;
        }
        return false;
    }

}

 

老杜在 150P 给出的答案

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

public class GenRandomAnswer {
    public static void main(String[] args) {
        Random random = new Random();

        int[] arr = new int[5];
        int index = 0;
        for (int i = 0; i < arr.length ; i++) {
            arr[i] = -1;
        }

        while(index < arr.length) {
            int num = random.nextInt(101);

            if(!contains(arr, num)) {
                arr[index++] = num;
            }
        }

        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }

    public static boolean contains(int[] arr, int key) {
        /* 有BUG, 最终会打出两个-1
        Arrays.sort(arr);
        // 使用二分法查找
        return Arrays.binarySearch(arr, key) >= 0;
        */
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == key) return true;
        }
        return false;
    }
}

 

中间老师尝试过使用二分法查找, 虽然最后翻车了

但是这个思路我压根没想到

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值