产生10个不同的随机数到数组里

解决方案 »

  1.   

    public static void main(String[] args) {
    List<Integer> list = new ArrayList<Integer>();
    for (int i = 0; i < 10; i++) {
    int num =  (int) (Math.random()*100);
    list.add(num);
    }
    System.out.println(list);
    }
      

  2.   

    //一般做法
    int[] ran = new int[10];
    int seed = 10;
    ran[0] = (int)(Math.random()*seed); //任意获得一个随即数
    for (int i=1; i<ran.length; i++) {
        ran[i] = ran[i-1] + ((int)(Math.random()*seed + 1)); //按升序追加随即数可保证不重复
    }
    for (int i=0; i<ran.length; i++) { //如果不希望按升序出现,就打乱位置
        int idx = (int)(Math.random()*ran.length);
        int tmp = ran[idx];
        ran[idx] = ran[ran.length-idx-1];
        ran[ran.length-idx-1] = tmp;
    }
    System.out.println(Arrays.toString(ran));//特殊情况做法
    //如果你的10个数从某个范围中获取
    int max = 100; //范围
    List<Integer> list = new LinkedList<Integer>();
    for (int i=0; i<max; i++) {
        list.add(i);
    }
    int[] ran = new int[10];
    for (int i=0; i<ran.length; i++) {
        ran[i] = list.remove(((int)Math.random()*list.size()));
    }
    System.out.println(Arrays.toString(ran));
      

  3.   


    public class ProduceRandom {
    public static int MIN = 100;
    public static int MAX = 200;//不包含MAX
    public static void main(String[] args) throws InterruptedException {
    Set<Integer> integers = new HashSet<Integer>();
    Random random = new Random(47);
    while (integers.size() < 10) 
    integers.add(random.nextInt(MAX-MIN)+MIN);//假设只产生整数,不产生浮点数等其他类型的数
    Object[] intArray = integers.toArray();
    System.out.println(Arrays.toString(intArray) );
    }
    }
      

  4.   


    public class ProduceRandom {
    public static int MIN = 100;
    public static int MAX = 200;//不包含MAX
    public static void main(String[] args)  {
    Set<Integer> integers = new HashSet<Integer>();
    while (integers.size() < 10) 
    integers.add((int)(Math.random()*(MAX-MIN))+MIN);//假设只产生整数,不产生浮点数等其他类型的数
    Object[] intArray = integers.toArray();
    System.out.println(Arrays.toString(intArray) );
    }
    }
      

  5.   

    但阿宝大哥第二个有个手误。int括号加错了。
      

  6.   

    import java.util.ArrayList;
    import java.util.List;public class RandomTest
    {
        
        /**产生1到10的10个不同的随机数到数组里
         * @param args
         */
        public static void main(String[] args)
        {
            List<Integer> list = new ArrayList<Integer>();
            for (int i = 0; i < 10; i++)
            {
                int num = (int)(Math.random() * 10);
                //如果有重复就跳过本次
                boolean isHave=false;
                for (int j = 0; j < list.size(); j++)
                {
                    if (num == list.get(j))
                    {
                        isHave=true;
                        break;
                    }
                }
                if(!isHave)
                {
                list.add(num);
                }
            }
            System.out.println(list);
        }
    }
      

  7.   

    上面有问题,不能保证产生10个
    现在如下:import java.util.ArrayList;
    import java.util.List;public class RandomTest
    {
        
        /**产生1到10的10个不同的随机数到数组里
         * @param args
         */
        public static void main(String[] args)
        {
            List<Integer> list = new ArrayList<Integer>();
           
            while(true)  
            {
                int num=(int)(Math.random() * 10);
                //如果有重复就跳过本次
                boolean isHave=false;
                for (int j = 0; j < list.size(); j++)
                {
                    if (num == list.get(j))
                    {
                        isHave=true;
                        break;
                    }
                }
                if(!isHave)
                {
                list.add(num);
                }
                //数组正好还有10个不同数字时,跳出循环
                if(list.size()==10)
                {
                    break;
                }
            }
            System.out.println(list.size()+"  "+list);
        }
        
        
    }
      

  8.   

    3L阿宝 LinkedList 方式求不同的随机数 是我在本版见过的此问题最优美的解法
      

  9.   

    如果不使用集合,为了提高效率,可以仿照下面的写法
    import java.util.Arrays;
    public class ProduceRandom {
        public static int MIN = 100;
        public static int MAX = 200;//不包含MAX
        public static int SUM = 10;//总共10个随机数
        public static void main(String[] args) throws InterruptedException {
    Integer[] intArray = new Integer[SUM];
    for (int counter = 0; counter < 10; counter++) { //记录已经产生的随机数个数
        Integer temp = (int) (Math.random() * (MAX - MIN)) + MIN;//假设只产生整数,不产生浮点数等其他类型的数
        int index = temp % SUM;//因为没有使用集合,为了提高匹配效率,仿真哈希算法,简单的产生下标
        while (intArray[index] != null) {
    if (intArray[index] == temp)
        break;//值相同时也复制到那个堆内存,相当于什么都没做
    index = (index + 1) % SUM;
        }
        intArray[index] = temp;
    }
    System.out.println(Arrays.toString(intArray));
        }
    }
      

  10.   


    //如果不使用集合,请仿照下面的写法
    public class ProduceRandom {
        public static void main(String[] args) {
    Integer[] intArray = getRandomArray(100, 200, 10);
    for (Integer i : intArray) {
        System.out.print(i + " ");
    }
        }    /**
         * @param MIN:下界
         * @param MAX:上界
         * @param SUM:总个数
         * @return:不同整数的整型数组
         */
        public static Integer[] getRandomArray(final int MIN, final int MAX,
        final int SUM) {
    Integer[] intArray = new Integer[SUM];
    for (int counter = 0; counter < 10; counter++) { // 记录已经产生的随机数个数
        Integer temp = (int) (Math.random() * (MAX - MIN)) + MIN;// 假设只产生整数,不产生浮点数等其他类型的数
        int index = temp % SUM;// 因为没有使用集合,为了提高匹配效率,仿真哈希算法,简单的产生下标
        while (intArray[index] != null) {
    if (intArray[index] == temp)
        break;// 值相同时也复制到那个堆内存,相当于什么都没做
    index = (index + 1) % SUM;
        }
        intArray[index] = temp;
    }
    return intArray;
        }
    }
      

  11.   

    import java.util.HashSet;
    import java.util.Iterator;
    import java.util.Random;
    import java.util.Set;public class Test {

    public static Set createRandom(int b){
    Random a1 = new Random();
    Set set = new HashSet();
    while(set.size() < b){
    set.add(a1.nextInt(50));
    }
    return set;
    }

    public static void main(String[] args) {
    Set set = createRandom(10);
    Iterator i = set.iterator();
    System.out.println(set.size());
    while(i.hasNext()){
    System.out.println(i.next());
    }
    }
    }