ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

关于 Random 类的随机数

2020-03-26 13:04:09  阅读:169  来源: 互联网

标签:index arr int Random ++ length num 关于 随机数


生成 5 个不相同的随机数,放到一个数组中

  • 方案一
public class RandomTest02 {
    public static void main(String[] args) {

        // 开辟数组空间
        int[] arr = new int[5];
        // 默认将数组中所有元素初始化为 0 
        for (int i = 0;i < arr.length; i++){
            arr[i] = -1;
        }
        // 创建 Random 对象
        Random r = new Random();
        //关键的 index
        int index = 0;
        
        w:while(index < arr.length){
            // 这里为了显示效果,将边界设置为 6,即数字取值范围为[0,6)
            int num = r.nextInt(6);
            for (int i = 0; i < index ; i++) {
                if(num == arr[i]) {
                    continue w;
                }
            }
            arr[index] = num;
            index++;
        }

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

  • 方案二
import java.util.Random;
public class RandomTest03 {
    public static void main(String[] args) {

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

        Random r = new Random();

        int index = 0;
        while(index < arr.length){
            int n = r.nextInt(6);
            if(!contains2(arr,n)){       //这里因为判断一个数字是否在一个数组不好写,所以单独写了一个判断的方法
                arr[index++] = n;
            }
        }

        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
//这是我写的判断方法,其实写的复杂了。可以改为下面注释掉的方式
    public static boolean contains(int[] a, int num) {
        int i;
        for (i = 0; i < a.length; i++) {
            if (a[i] == num) {
                break;
            } else {
                continue;
            }
        }
        if (i == a.length) {
            return false;
        } else {
            return true;
        }

	
       /*for(int j = 0;j < a.length; j++){
          if(a[j] == num){
              return true;
          }
        }
        return false; */ 
  • 方案三:基于二分法(存在 bug)

这里只贴出了判断的部分代码,主体部分跟上面的方法二一样。这种方式看起来简单完美,但实际运行发现存在 bug:输出的数组中前两个元素永远是 -1,这是因为二分法每次排序都会打乱原数组的顺序导致的 !

因此该方案不可用 !

public static boolean contains2(int[] a, int num){  //这种方案有 bug,但看起来很妙!,
        Arrays.sort(a);     //这里的排序会导致前两个数永远是 -1
        int index = Arrays.binarySearch(a,num);
        if (index >= 0){
            return true;
        }else {
            return false;
        }
    }

标签:index,arr,int,Random,++,length,num,关于,随机数
来源: https://www.cnblogs.com/yerun/p/12573696.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有