黑马程序员技术交流社区

标题: if(!arr[temp])中的!arr[temp]结果就是true,为什么我改成true就不... [打印本页]

作者: 迦罗叶    时间: 2014-2-20 00:17
标题: if(!arr[temp])中的!arr[temp]结果就是true,为什么我改成true就不...
本帖最后由 迦罗叶 于 2014-2-21 12:28 编辑

//随机获取33位中的6位
public static String[] base()
        {
                String[] num = {"01","02","03","04","05","06","07","08",
                                                "09","10","11","12","13","14","15","16",
                                                "17","18","19","20","21","22","23","24",
                                                "25","26","27","28","29","30","31","32","33"};
                boolean[] arr = new boolean[33];
                //获取红球
                String[] redBase = new String[6];
                int x=0;
                do
                {
                        Random r = new Random();
                        int temp = r.nextInt(num.length);//从0<=temp<num.length(33)中随机抽取一个数
//请问一下,下面的if(!arr[temp])中的!arr[temp]结果就是true,为什么我改成true就不行呢
                        if(!arr[temp])
                        {
                                arr[temp] = true;
                        
                                redBase[x] = num[temp];
                                x++;
                        }
                }
                while (x<6);
                return redBase;
        }
}
作者: 李金中    时间: 2014-2-20 00:31
额,首先 你的意思是把(!arr[temp])换成true么? 如果是的话,那么上段代码你没看懂。
===================================================
上面的代码,可以是你获得6个不同的随机数,注意是不同。

分析一下:
1.arr该布尔型的数组默认所有元素都是false,因为没有赋值。
2.当你通过int temp = r.nextInt(num.length);这一句获得一个随机数时,比如首次出现1。那么!arr[1]为ture
,进入下面语句,把arr[1]赋值为true。
3.当你通过int temp = r.nextInt(num.length);这一句获得一个随机数时,第二次出现1,那么!arr[1]为false,
进不去x++的语句的。即是生成失败。
4,如此,只有你生成6个不同的随机数,才能把结果存储到redBase中,也才能退出循环。
===========================================================
如果你的意思不是把(!arr[temp])换成true,估计不太可能。。。Beyond my believe。。。。
作者: 戚兴海    时间: 2014-2-20 01:42
楼上说的很对,其他部分都很简单,可能困惑你的就是这个if条件语句了
if(!arr[temp]) {
        arr[temp] = true;
        redBase[x] = num[temp];
         x++;
}
因为刚创建出来的boolean数组arr里面的值默认都是false的,也就是说从arrp[0]到arr[32]的值都是false,现在假设随机到的数是5,就是temp的值是5,那么if条件就为真,进入if语句后,arr[5]的值被改为true。
等在取下一个随机数的时候,还是有可能随机到5的,那么这时由于arr[5]的值是true的,进行判断的时候!arr[temp]就是假,从而跳过循环,重新取随机数,这就保证了取到的6个数都不相同,正如楼上所说的!




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