Java随机产生数组元素并无重复元素方法

package myPackage;
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;

public class RandomNumber {

     /**
      * 定义获取随机数
      *
      * @param num
      */
     public static int getRandom(int value) {
         int num;
         Random r = new Random();
         num = r.nextInt(value);
         return num;
     }

     /**
      * 打印数组,排序前与排序后
      *
      * @param num
      */
     public static void getSort(int[] num) {
         System.out.println("原数组:");
         for (int i = 0; i < num.length; i++) {
              if (i != 0 && i % 10 == 0)
                   System.out.println();
              System.out.print(num[i] + " ");
         }
         System.out.println("\n排序后:");
         Arrays.sort(num);
         for (int i = 0; i < num.length; i++) {
              if (i != 0 && i % 10 == 0)
                  System.out.println();
              System.out.print(num[i] + " ");
         }
      }

     /**
      * 防止产生随机数方法一
      *
      * @param num
      */
     public static void getNum(int[] num, int value) {
         int temp;
         for (int i = 0; i < num.length; i++) {
             temp = getRandom(value);
             for (int j = 0; j < i; j++) {
                 if (num[j] == temp) {
                     temp = getRandom(value);
                     j = -1;
                 }
             }
             num[i] = temp; // 直到确认无重复时,将值赋给数组元素
          }
      }

     /**
      * 防止产生随机数方法二
      *
      * @param size
      * @return
      */
     public static int[] getNum(int size, int maxValue) {
         int[] v = new int[size];
         if (size > maxValue || size <= 0) {
             v = null;
         }
         for (int i = 0; i < v.length; i++) {
              v[i] = getRandom(maxValue);
              for (int j = 0; j < i; j++) {
                   if (v[j] == v[i]) {
                    i--; // 当遇到重复数时,返回其元素获取元素的随机方法
                    break;
                   }
               }
          }
          return v;
      }

     /**
      * 防止产生随机数方法三
      *
      * @param value
      * @param num
      */
     public static void getNum(int value, int[] num) {
         for (int i = 0; i < num.length; i++) {
             num[i] = (value * i / num.length) + (int) (Math.random() * value / num.length);
         }
     }

     /**
      * 防止产生随机数方法四
      *
      * @param size
      * @param value
      * @return
      */
     public static void getNum1(int[] num, int size, int value) {
         boolean[] v = new boolean[value];
         int temp = 0;
         for (int i = 0; i < num.length; i++) {
             do {
                 temp = getRandom(value);
             } while (v[temp]);
             v[temp] = true;
             num[i] = temp;
         }
      }

     /**
      * 主方法
      *
      * @param args
      */
     public static void main(String[] args) {
         Scanner input = new Scanner(System.in);
         System.out.print("请输入数组的长度:");
         int size = input.nextInt();
         System.out.print("表输入产生随机数范围:");
         int maxValue = input.nextInt();

         // 方法一
         System.out.println("方法一");
         int[] num = new int[size];
         getNum(num, maxValue);
         getSort(num);

         System.out.println("\n-------------------------------------------------------------------------");

         // 方法二
         System.out.println("方法二");
         int[] num1 = getNum(size, maxValue);
         if (num1 != null) {
              getSort(num1);
         }

         System.out.println("\n-------------------------------------------------------------------------");

         // 方法三
         System.out.println("方法三");
         int[] num2 = new int[size];
         getNum(maxValue, num2);// 其方法已是有序随机方法数组
         getSort(num2);

         System.out.println("\n-------------------------------------------------------------------------");

         // 方法四
         System.out.println("方法四");
         int[] num3 = new int[size];
         getNum1(num3, size, maxValue);
         getSort(num3);

     }
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值