A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© moonlight 黑马帝   /  2011-11-18 10:06  /  1917 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 moonlight 于 2011-11-20 17:19 编辑

import java.util.*;
public class RandomNum
{
public static void main(String[] args)
{
    //生成 [0-n) 个不重复的随机数
    //list 用来保存这些随机数
  ArrayList list = new ArrayList();
  int n = 100;
  Random rand = new Random();
  boolean[] bool = new boolean[n];

    int num = 0;

    for (int i = 0; i < n; i++)
    {

      do {
       //如果产生的数相同继续循环
       num = rand.nextInt(n);

       } while (bool[num]);

  bool[num] = true;

      list.add(num);

    }
  for (int i = 0; i < 10; i++)
  {
     System.out.println("第"+i+"个是:"+list.get(i));
    }

  }

}

如上面,这个程序是产生100以内10个不相同的随机数,但定义的  boolean[] bool = new boolean[n];  这句有什么作用啊?还有  do...while (bool[num]);  这句,这判断条件是怎么回事啊?看不明白,为什么非要定义boolean,直接把条件改为true为什么不行啊?求详解!!!!

5 个回复

倒序浏览
do{}while是先做后判断,当做到bool[num]为假的时候就不做了,做的为假的这个数就是要找的数,然后马上把这个数相应位置boolean值设为真,也就是说boolean数组里的所有数都为true,一旦循环到一个假的,那么肯定和他们都不一样,所以10个数每个都不一样了
回复 使用道具 举报
因为boolean的默认是假,比如一个数是bool[15].那么bool【15】肯定是假,然后马上把bool【15】改为真,然后再做do  加入第二个数又是15,那么boo【15】为真,不满足,要接着做do,再出现不是15的数,比如20,bool【20】又是假,以此类推,每次只要是假,都和前面变为真的数不一样,这么说懂了吧
回复 使用道具 举报
boolean[] bool = new boolean[n];  就是创建了一个默认都是false的长度为n的数组,do while循环就是 当while(false)就只执行一次do里面的内容,比如第一次随机生成了50,那么跳出循环并将boolean[50]设为true,那么下次再随机生成50的时候,由于boolean[50]为true,就不会跳出do while循环,这样就保证了不会返回相同的随机数了。如果你把while改为true那就成死循环了。
回复 使用道具 举报
基本上懂了 谢谢各位的指点!{:soso_e100:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马