黑马程序员技术交流社区

标题: 获取10个1至20的随机数,要求随机数不能重复 [打印本页]

作者: 撑起一个家    时间: 2015-3-15 19:45
标题: 获取10个1至20的随机数,要求随机数不能重复
package exam;

/*   
写一个程序,获取10个1至20的随机数,要求随机数不能重复
*/
public class D002 {

        public static void main(String[] args) {

                // 定义10随机数
                int temp1, temp2, temp3, temp4, temp5, temp6, temp7, temp8, temp9, temp10;
                // 第1个变随机数
                temp1 = (int) (Math.random() * 20 + 1);
                // 第2个变量赋值
                while (true) {
                        int temp = (int) (Math.random() * 20 + 1);
                        if (temp1 != temp) {
                                temp2 = temp;
                                break;
                        }
                }
                // 第3个随机数
                while (true) {
                        int temp = (int) (Math.random() * 20 + 1);
                        if (temp1 != temp && temp2 != temp) {
                                temp3 = temp;
                                break;
                        }
                }
                // 第4个随机数
                while (true) {
                        int temp = (int) (Math.random() * 20 + 1);
                        if (temp1 != temp && temp2 != temp && temp3 != temp) {
                                temp4 = temp;
                                break;
                        }
                }
                // 第5个随机数
                while (true) {
                        int temp = (int) (Math.random() * 20 + 1);
                        if (temp1 != temp && temp2 != temp && temp3 != temp
                                        && temp4 != temp) {
                                temp5 = temp;
                                break;
                        }
                }
                // 第6个随机数
                while (true) {
                        int temp = (int) (Math.random() * 20 + 1);
                        if (temp1 != temp && temp2 != temp && temp3 != temp
                                        && temp4 != temp && temp5 != temp) {
                                temp6 = temp;
                                break;
                        }
                }
                // 第7个随机数
                while (true) {
                        int temp = (int) (Math.random() * 20 + 1);
                        if (temp1 != temp && temp2 != temp && temp3 != temp
                                        && temp4 != temp && temp5 != temp && temp6 != temp) {
                                temp7 = temp;
                                break;
                        }
                }
                // 第8个随机数
                while (true) {
                        int temp = (int) (Math.random() * 20 + 1);
                        if (temp1 != temp && temp2 != temp && temp3 != temp
                                        && temp4 != temp && temp5 != temp && temp6 != temp
                                        && temp7 != temp) {
                                temp8 = temp;
                                break;
                        }
                }
                // 第9个随机数
                while (true) {
                        int temp = (int) (Math.random() * 20 + 1);
                        if (temp1 != temp && temp2 != temp && temp3 != temp
                                        && temp4 != temp && temp5 != temp && temp6 != temp
                                        && temp7 != temp && temp8 != temp) {
                                temp9 = temp;
                                break;
                        }
                }
                // 第10个随机数
                while (true) {
                        int temp = (int) (Math.random() * 20 + 1);
                        if (temp1 != temp && temp2 != temp && temp3 != temp
                                        && temp4 != temp && temp5 != temp && temp6 != temp
                                        && temp7 != temp && temp8 != temp && temp9 != temp) {
                                temp10 = temp;
                                break;
                        }
                }

                System.out.println(temp1);
                System.out.println(temp2);
                System.out.println(temp3);
                System.out.println(temp4);
                System.out.println(temp5);
                System.out.println(temp6);
                System.out.println(temp7);
                System.out.println(temp8);
                System.out.println(temp9);
                System.out.println(temp10);
        }
}
有木有一个简单的思路,不使用数组?
作者: みぎ    时间: 2015-3-15 21:15
可以使用map,如下:
  1. public static void main(String[] args)
  2.         {
  3.                 Map<Integer, Integer> map = new HashMap<Integer, Integer>();
  4.                 Random rand = new Random(47);
  5.                 int x;
  6.                 for(int i=0; map.size()<10; i++) {
  7.                         x = rand.nextInt(20);
  8.                         if(!map.containsValue(x)) {
  9.                                 map.put(i, x);
  10.                         }
  11.                 }
  12.            
  13.                 for(int value : map.values()) {
  14.                         System.out.println(value);
  15.                 }

  16.         }
复制代码

作者: Shey    时间: 2015-3-15 21:19
代码我是不会贴出来的,不知道你又没有看基础视频,记不记得有个集合叫Set
当然,你可以while到Set集合中的元素个数达到你的要求再结束
多注重下集合的运用,很重要
作者: 撑起一个家    时间: 2015-3-17 22:53
みぎ 发表于 2015-3-15 21:15
可以使用map,如下:

学习了,谢谢
作者: 撑起一个家    时间: 2015-3-17 22:54
Shey 发表于 2015-3-15 21:19
代码我是不会贴出来的,不知道你又没有看基础视频,记不记得有个集合叫Set
当然,你可以while到Set集合中的 ...

谢谢,今天刚看到HashSet,无序,唯一
作者: cq280309216    时间: 2015-3-17 23:01
那么多重复代码不是可以封装函数吗?
作者: mark.tian    时间: 2015-3-17 23:04
借鉴了。。。。。。。
作者: 文森    时间: 2015-5-10 10:41
觉得用HashSet方便些
作者: 拾起落叶    时间: 2015-7-12 15:32
        public static void main(String[] args) {
               
               
                for (Integer integer : getRandom(10, 20)) {
                        System.out.println(integer);
                }
               
        }
         private static HashSet<Integer> getRandom(int x,int y){
                 
                 //定义一个HashSet集合,用来存储随机数。利用Set集合中元素唯一性来使随机数不重复
                 HashSet<Integer> hs=new HashSet<Integer>();
                 
                 //使用for循环来获取随机数
                        for (int i = 0; hs.size()< x; i++) {
                               
                                //创建一个随机数生成器。
                                Random rd1=new Random();
                               
                                //调用Random类中的nextInt()方法来获取指定范围内的随机数。(0~y)
                                int num=rd1.nextInt(y)+1;
                                hs.add(num);
                        }
                        return hs;
            }
作者: huangguan    时间: 2015-7-29 22:37
无序的随机方式应该可以直接调用方法实现
作者: 心在左边跳    时间: 2015-8-28 21:45
你写的不是随机的,每个数产生的概率不一样.可以使用随机算法生成.
作者: youyuxiaoyu    时间: 2015-9-17 06:33
很厉害的样子
作者: 黄古槟    时间: 2015-9-18 21:19
好常见的题 这个
作者: gaoyintong    时间: 2015-9-26 21:36
思路:
        1、获取随机数,就用Random
        2、随机数不能重复,就用set集合
          3、长度为10,让set集合长度<=10
作者: ganjx    时间: 2015-10-6 01:40
先把求出来的存起来不行吗?
作者: 260744042    时间: 2015-10-29 21:19
  1. import java.util.HashSet;
  2. import java.util.Iterator;
  3. import java.util.Set;


  4. public class Test01 {
  5.         public static void main(String[] args) {
  6.                  
  7.                  Set<Integer> a = new HashSet<Integer>();
  8.                  while(a.size()<10){
  9.                          int temp = (int) (Math.random() * 20 + 1);
  10.                          a.add(temp);
  11.                  }
  12.                  Iterator<Integer> iterator = a.iterator();
  13.                  while(iterator.hasNext()){
  14.                          System.out.println(iterator.next());
  15.                  }
  16.         }
  17. }
复制代码

作者: woxinfeixiang    时间: 2015-10-30 22:24
用随机算法可以生成啊,很快的
作者: 菜鸟一号    时间: 2015-10-31 23:51
{:2_38:}我晕了
作者: 罗志凯    时间: 2015-11-3 23:38
表示目前只会获取随机数,集合什么的还没开始学
作者: 洛克先生EN    时间: 2015-11-5 15:13
Set集合不可以存储重复元素啊
作者: rickyli    时间: 2015-11-7 00:37
一楼的代码看的人都醉了
作者: yph19950519    时间: 2016-3-17 23:37
public static void main(String[] args) {
            ArrayList<Integer> list=new ArrayList<Integer>();
            Random rand=new Random();
            int num;
            while(list.size()<10){
                    num=rand.nextInt(20)+1;
                    if(!list.contains(num)){
                            list.add(num);
                    }
            }
            
            for(Integer i:list){
                    System.out.println(i);
            }
       
        }
作者: 大彬周    时间: 2016-3-19 20:27
路过学习一下````
作者: MuziTian    时间: 2016-3-19 22:00
这种题明显的要使用循环呢!
作者: 2016coco    时间: 2016-3-25 22:36
厉害厉害呀,呵呵,学习了
作者: LiuLiu006    时间: 2016-4-1 00:13
沙发....................
作者: zhanfu2008    时间: 2016-4-5 23:42
#在这里private static void getNum() {                 //创建一个HashSet集合,它的特点是在添加前会判断有没有一样的元素,有就不添加                 HashSet<Integer> hs= new HashSet<Integer>();                 //创建一个生成器,添加到集合里,当集合里的元素有十个跳出循环;                 while(hs.size() < 10) {                         int i = (int)(Math.random()*20+1);                         hs.add(i);                 }                 //打印                 System.out.println(hs);         }快速回复#




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2