黑马程序员技术交流社区

标题: 这句是在做什么的? [打印本页]

作者: 姚远    时间: 2012-5-11 06:01
标题: 这句是在做什么的?
import java.util.Random;
public class Rand {
    public static void main (String[] args){
        
        Random number = new Random();
        int freq[]=new int[7];
        
        for (int roll=1;roll<1000;roll++){
            ++freq[1+number.nextInt(6)];
        }
        
        System.out.println("Face\tFrequency");
        
        for(int counter=1;counter<freq.length;counter++){
            System.out.println(counter+"\t"+freq[counter]);
        }
    }
}

-----------------------------------------------------------------------------------
输出的结果:

Face    Frequency
1    173
2    149
3    168
4    173
5    159
6    177

-----------------------------------------------------------------------------------

问题 : ++freq[1+number.nextInt(6)] 这句是在做什么?
作者: 张小锋    时间: 2012-5-11 06:31
int freq[]=new int[7];//此处表示创建一个数字,默认freq中的所有元素初始值为0
number.nextInt(6);     //产生0-5之间的随机数
++freq[1+number.nextInt(6)];每执行一次,表示:
将包括freq[0]~freq[6]之间 的某一个元素的值加1,具体哪一个元素是随机的
数字中的某一个元素加了n次,其值就是n

作者: 黄坚声    时间: 2012-5-11 07:01
for (int roll=1;roll<1000;roll++){
            ++freq[1+number.nextInt(6)];//首先理解number.nextInt(6),意思是随机产生0到6之间的整数再+1
        }                                             //  然后1+number.nextIn(6)的结果当作数组freq的下标,最后该数组元素自增1,如此循环下去。

作者: 黄坚声    时间: 2012-5-11 07:04
哥们,纠正一下,
int freq[]=new int[7];//你那样写法不大好,应该这样写:int[] freq = new int[];

遵从大多数程序员的良好编程习惯。

作者: 王德升    时间: 2012-5-11 08:01
黄坚声 发表于 2012-5-11 07:04
哥们,纠正一下,
int freq[]=new int[7];//你那样写法不大好,应该这样写:int[] freq = new int[];


哥们,你似乎很牛阿,小生佩服阿,
作者: 索学超    时间: 2012-5-11 09:32
黄老的建议是正确的,大家支持啊。写的时候也注意下,呵呵。

问题 : ++freq[1+number.nextInt(6)] 这句是在做什么?

解剖下  这个可以分成三部分
1、freq[1+number.nextInt(6)] ,不管里面是什么,但它的结果是一个数值是不,前面加上++,就是让这个数值自增,循环一次加1
2、number.nextInt(6), 这部分引用上面那哥们的话,就是产生一个0~5的随机数
3、1+number.nextInt(6)  ,就上让产生的那个随机数加1吗。为什么要加1呢?你定义的那个数组的长度不是7吗,加1就相当于产生一个     0~6的随机数。正好把数组的下标占全了,也就有取出里面任何一个数的可能
总结: ++freq[1+number.nextInt(6)]就是让你定义的那个数组里面存的随便一个数加1
作者: 贠(yun)靖    时间: 2012-5-11 11:19
黄坚声 发表于 2012-5-11 07:04
哥们,纠正一下,
int freq[]=new int[7];//你那样写法不大好,应该这样写:int[] freq = new int[];

你这样写int[] freq = new int[];   不直接给定数组元素  这个算神马?   这样写明显是错的  

作者: 小小企鹅    时间: 2012-5-11 11:33
对数组freq的一个随机元素值加1,输出freq结果中的数字值的和为1000-1。
作者: 符云爵    时间: 2012-5-11 11:58
贠(yun)靖 发表于 2012-5-11 11:19
你这样写int[] freq = new int[];   不直接给定数组元素  这个算神马?   这样写明显是错的  
...

顶版主,他可能一时没注意吧,以为是集合呢长度可变,数组可没提供这样的功能。




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