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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 姚远 初级黑马   /  2012-5-11 06:01  /  2073 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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)] 这句是在做什么?

8 个回复

倒序浏览
int freq[]=new int[7];//此处表示创建一个数字,默认freq中的所有元素初始值为0
number.nextInt(6);     //产生0-5之间的随机数
++freq[1+number.nextInt(6)];每执行一次,表示:
将包括freq[0]~freq[6]之间 的某一个元素的值加1,具体哪一个元素是随机的
数字中的某一个元素加了n次,其值就是n

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
for (int roll=1;roll<1000;roll++){
            ++freq[1+number.nextInt(6)];//首先理解number.nextInt(6),意思是随机产生0到6之间的整数再+1
        }                                             //  然后1+number.nextIn(6)的结果当作数组freq的下标,最后该数组元素自增1,如此循环下去。
回复 使用道具 举报
哥们,纠正一下,
int freq[]=new int[7];//你那样写法不大好,应该这样写:int[] freq = new int[];

遵从大多数程序员的良好编程习惯。
回复 使用道具 举报
王德升 来自手机 中级黑马 2012-5-11 08:01:38
报纸
黄坚声 发表于 2012-5-11 07:04
哥们,纠正一下,
int freq[]=new int[7];//你那样写法不大好,应该这样写:int[] freq = new int[];


哥们,你似乎很牛阿,小生佩服阿,
回复 使用道具 举报
黄老的建议是正确的,大家支持啊。写的时候也注意下,呵呵。

问题 : ++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
回复 使用道具 举报
黄坚声 发表于 2012-5-11 07:04
哥们,纠正一下,
int freq[]=new int[7];//你那样写法不大好,应该这样写:int[] freq = new int[];

你这样写int[] freq = new int[];   不直接给定数组元素  这个算神马?   这样写明显是错的  
回复 使用道具 举报
对数组freq的一个随机元素值加1,输出freq结果中的数字值的和为1000-1。
回复 使用道具 举报
贠(yun)靖 发表于 2012-5-11 11:19
你这样写int[] freq = new int[];   不直接给定数组元素  这个算神马?   这样写明显是错的  
...

顶版主,他可能一时没注意吧,以为是集合呢长度可变,数组可没提供这样的功能。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马