黑马程序员技术交流社区

标题: 关于数组的随机数问题,很费解,求大神指导 [打印本页]

作者: 梁胜海    时间: 2012-11-7 11:01
标题: 关于数组的随机数问题,很费解,求大神指导
题目要求:随机生成50个数字(整数),每个数字的范围是[10,50],统计每个数字出现的次数以及出现次数最多的数字与它的个数,最后将每个数字及其出现次数打印出来,如果某个数zi出现次数为0,则不要打印它。打印时按照数字的升序排列

下面是代码:
import java.util.Random;
public class RandomTest2 {
public static void main(String[] args) {
  Random r= new Random();
  int[] count = new int[41];
  for(int i=0;i<50;i++){
   int a=r.nextInt(41)+10;
   System.out.print(a+" ");
   count[a-10]++;//记录数字出现的次数
  }
  System.out.println("-----------------");
  for(int j=0;j<count.length;j++){
   //System.out.println(count[j]);
   if(0==count[j]){   //如果出现的次数等于0,跳过当次
    continue;
   }

   System.out.println((10+j)+"出现的次数"+count[j]);
  }
  int max=count[0];
  for(int k=0;k<count.length;k++){
   if(max<count[k]){
    max=count[k];
   }
  }
  System.out.println("出现最大的次数为"+max+"次");
  for(int g=0;g<count.length;g++){
   if(max==count[g]){
    System.out.println(g+10);
   }
  }
}
}
总之,希望细心热心的大神最好把代码拷下去,写个详细的注释,我只把这代码看的朦朦胧胧,只希望某位大神能有更清晰的思路让我理解更彻底些。

作者: sixth    时间: 2012-11-7 12:49
public class Rtest {

        public static void main(String[] args) {
                Random r = new Random();                //创建一个Random类
                int[] count = new int[41];               
                for (int i = 0; i < 50; i++) {
                        int a = r.nextInt(41) + 10;                //这里的nextInt()方法返回一个整数,这个整数的范围在0(包括0)和指定值(不包括)即41之间的一个整数。也就是返回[0,40]
                        System.out.print(a + " ");
                        /*这里将你随机出来的数字输出之后,输出,但是不保存,只将与随机出来的这个数字的次数保存到数组中,下标是随机出来的这个数字
                         */
                        count[a - 10]++;// 记录数字出现的次数       
                }
                System.out.println("-----------------");
                for (int j = 0; j < count.length; j++) {
                        // System.out.println(count[j]);
                        if (0 == count[j]) { // 如果出现的次数等于0,跳过当次
                                continue;
                        }
                        System.out.println((10 + j) + "出现的次数" + count[j]);//将数组中不为0 的数字输出,即其下标对应的数字出现的次数
                }
                int max = count[0];                //将count[0]的值付给max
                for (int k = 0; k < count.length; k++) {
                        if (max < count[k]) {                //如果数组中的元素有大于max的,那么就将该数赋给max,这样一直到循环结束,max边得到了数组元素中的最大值
                                max = count[k];
                        }
                }
                System.out.println("出现最大的次数为" + max + "次");
                for (int g = 0; g < count.length; g++) {        //这里是将出现最大次数的数字输出
                        if (max == count[g]) {
                                System.out.println(g + 10);
                        }
                }
        }

}

给你写了注释了,希望你能看懂,多做点这样类似的小题目,常用的算法等,就能很明白的看懂这样的题目了,例如你可以试着优化一下上面的代码





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