黑马程序员技术交流社区

标题: 【问题解决】一道编程题 [打印本页]

作者: hello world    时间: 2012-8-5 23:23
标题: 【问题解决】一道编程题
本帖最后由 刘向阳 于 2012-8-6 08:51 编辑

随机生成50个数,每个数字的范围是【10-50】。统计每个数字出现的次数以及出现次数对多的数字与他的个数,打印数字及其对应出现的次数,如果出现次数为0怎不打印他。打印时按照数字升序排列。
作者: 瞿乐    时间: 2012-8-5 23:44
我告诉你思路吧,敲代码还是要自己敲。使用 for循环50次,调用Random的nextInt(int n)方法,生成0~40之间再加10。
后面的我也不知道了,思考中……
作者: 余明辉    时间: 2012-8-6 00:24
本帖最后由 余明辉 于 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

作者: 瞿乐    时间: 2012-8-6 00:35
我想了一会,用数组做出来了,楼主应该可以看懂。经测试,运行通过了。
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] + "个");
                }

        }

}

作者: 瞿乐    时间: 2012-8-6 00:37
刚刚,我是10-50是算成了,40个数,如果算41个数的话,楼主应该知道该一下吧。
不懂集合,只能用数组了。希望楼主一看便懂~~呵呵
作者: 瞿乐    时间: 2012-8-6 00:41
这是我运行的一个效果截图

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

未命名.jpg

作者: 丶Forヾ    时间: 2012-8-6 02:10

作者: 丶Forヾ    时间: 2012-8-6 02:16
不好意思 跑错地方了 ...C#写的 不过思路都是一样的  呵呵 ...
作者: 瞿乐    时间: 2012-8-6 02:58
哈哈,乱跑堂的啊




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