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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hello world 黑马帝   /  2012-8-5 23:23  /  1319 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘向阳 于 2012-8-6 08:51 编辑

随机生成50个数,每个数字的范围是【10-50】。统计每个数字出现的次数以及出现次数对多的数字与他的个数,打印数字及其对应出现的次数,如果出现次数为0怎不打印他。打印时按照数字升序排列。

8 个回复

倒序浏览
我告诉你思路吧,敲代码还是要自己敲。使用 for循环50次,调用Random的nextInt(int n)方法,生成0~40之间再加10。
后面的我也不知道了,思考中……
回复 使用道具 举报
本帖最后由 余明辉 于 2012-8-6 01:01 编辑

我的思想是:
定义一个数组,里面存放10-50的数
然后通过随机数,取得数组的任意一个下标,然后添加进Map中
最后打印出来就是按key的升序排列的

public class Demo1 {
   public static void main(String[] args) {
  
      String[] arr = new String[41];
      for(int i=0; i<arr.length; i++) {
         arr = i + 10 + "";
       }
  //检验赋值情况
//    System.out.println(Arrays.toString(arr));
  
      TreeMap<String, Integer> map = new TreeMap<String, Integer>();
      map = randomNumber(arr);
  
  //检查随机情况,打印出来已经是升序的了
      for(Map.Entry<String, Integer> i :  map.entrySet()) {
          System.out.println(i);
      }
  
}

//获取50个随机数,并返回一个Map
    public static TreeMap<String, Integer> randomNumber(String[] arr) {
       TreeMap<String, Integer> map = new TreeMap<String, Integer>();
       Random r = new Random();
  
       for(int i=0; i<50; i++) {
            int number = r.nextInt(41);
            String key = arr[number];
            Integer look = map.get(key);
   
            if(look == null) {
                look = 1;
             } else {
                look ++;
             }
              map.put(key, look);
        }
  
        return map;
}
}
结果如下

11111111.jpg (15.81 KB, 下载次数: 6)

11111111.jpg

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
我想了一会,用数组做出来了,楼主应该可以看懂。经测试,运行通过了。
public class Test2 {
        public static void main(String[] args) {
                int[] arr = new int[50];
                int[] chs = new int[40];
                Random rand = new Random();
                // 生个50个 10~50的随机数
                for (int i = 0; i < 50; i++) {
                        arr[i] = rand.nextInt(40) + 10;
                }
                // 将10~50这些数 ,减去10,将其使用下标,记录个数,有的话就自增。
                for (int i = 0; i < 50; i++) {
                        int temp = arr[i] - 10;
                        chs[temp]++;
                }
                // 与上一步很相似,取存数的下标,加10便是 原来生成的随机数,里面存了个数
                // 如果 个数为则跳过不打印
                for (int i = 0; i < 40; i++) {
                        if (chs[i] == 0)
                                continue;
                        System.out.println((i + 10) + "共有" + chs[i] + "个");
                }

        }

}

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
刚刚,我是10-50是算成了,40个数,如果算41个数的话,楼主应该知道该一下吧。
不懂集合,只能用数组了。希望楼主一看便懂~~呵呵
回复 使用道具 举报
这是我运行的一个效果截图

未命名.jpg (23 KB, 下载次数: 0)

未命名.jpg
回复 使用道具 举报
回复 使用道具 举报
不好意思 跑错地方了 ...C#写的 不过思路都是一样的  呵呵 ...
回复 使用道具 举报
哈哈,乱跑堂的啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马