要求:
随机生成50个数字(整数),每个数字的范围是[10, 50],统计每个数字出现的次数以及出现次数最多的数字与它的个数,最后将每个数字及其出现次数打印出 来,如果某个数字出现次数为0,则不要打印它。打印时按照数字的升序排列。
版本一:(使用数组实现)
import java.util.Random; public class HomeWork { public static void main(String[] args) { int[] count = new int[50];//统计每个数字出现的次数 for(int i=0; i<50; i++) { int number = new Random().nextInt(41) + 10;//生成[10,50]之间的随机数 count[number-10]++; //充分利用数组下标提供的信息,利用下标信息得到具体的数字,而数组里面的值代表具体的数字出现的次数,这样,一个数组就搞定了两方面的需求。例如,count[0],count[1]分别代表10和11出现的次数,依次类推... } for(int i=0; i<count.length; i++) { if(count[i] != 0) { System.out.println((i+10)+"出现的次数是:"+count[i]); } } int max = count[0]; for(int i=0; i<count.length; i++)//找到那个最大的次数 { if(count[i] > max) { max = count[i]; } } for(int i=0; i<count.length; i++) { if(count[i] == max) { System.out.println("出现次数最多的数字是:"+(i+10)+",次数是:"+count[i]); } } } } /* 在Eclipse中的输出结果是: 12出现的次数是:1 13出现的次数是:3 14出现的次数是:3 15出现的次数是:1 16出现的次数是:3 17出现的次数是:1 20出现的次数是:1 22出现的次数是:4 23出现的次数是:3 24出现的次数是:4 27出现的次数是:1 28出现的次数是:1 29出现的次数是:2 30出现的次数是:2 31出现的次数是:2 32出现的次数是:1 33出现的次数是:1 34出现的次数是:1 37出现的次数是:3 43出现的次数是:2 46出现的次数是:2 48出现的次数是:3 49出现的次数是:1 50出现的次数是:4 出现次数最多的数字是:22,次数是:4 出现次数最多的数字是:24,次数是:4 出现次数最多的数字是:50,次数是:4 */
版本二:(使用集合实现)
import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Random; import java.util.Set; import java.util.TreeMap; public class HomeWorkStd { public static void main(String[] args) { Map map = new TreeMap();//存储数字及其出现的次数(key为数字,value数字为出现的次数)尝试HashMap map Random random = new Random(); for(int i=0; i<50; i++) { int number = random.nextInt(41) + 10; Integer in = new Integer(number); if(map.get(in) == null) { map.put(in, new Integer(1)); } else { int value = ((Integer)map.get(in)).intValue(); map.put(in, new Integer(value + 1)); } } Collection col = map.values(); Integer maxOccurs = (Integer)Collections.max(col);//可以自己实现找到最大次数,但是尽量用jdk提供的,因为其效率大部分情况下可能比自己写的要高。 Set set = map.entrySet(); List list = new ArrayList();//存储出现次数最大的数字 for(Iterator iter=set.iterator(); iter.hasNext();) { Map.Entry entry = (Map.Entry)iter.next(); Integer key = (Integer)entry.getKey(); Integer value = (Integer)entry.getValue(); if(value.intValue() == maxOccurs.intValue()) { list.add(key); } System.out.println(key + ":" + value); } System.out.println("出现最多次数为" + maxOccurs); System.out.println("这些数字分别是:"); for(Iterator iter=list.iterator(); iter.hasNext();) { System.out.println(iter.next()); } /*另一种方式 //找到最大的次数(自己实现) Collection coll = map.values(); int max = 0;//假设最大的次数为零 for(Iterator iter = coll.iterator(); iter.hasNext();) { Integer value = (Integer)iter.next(); if(value.intValue() > max) max = value.intValue(); } //输出出现次数最多的数 Set set = map.keySet(); for(Iterator iter = set.iterator(); iter.hasNext();) { Integer key = (Integer)iter.next(); if(((Integer)map.get(key)).intValue() == max) { System.out.println("出现次数最多的数有:" + key + ",次数为:" + max); } } */ } }
版本三:(简化版,使用集合,利用泛型、自动装箱/拆箱技术)
import java.util.Collection; import java.util.Collections; import java.util.Iterator; import java.util.Map; import java.util.Random; import java.util.Set; import java.util.TreeMap; public class StatisticRandomNumber { public static void main(String[] args) { TreeMap<Integer, Integer> map = new TreeMap<Integer, Integer>(); Random random = new Random(); int temp; for(int i=0; i<50; i++) { temp = random.nextInt(41) + 10; if(map.get(temp) == null) map.put(temp, 1); else map.put(temp, map.get(temp) + 1); } Set<Map.Entry<Integer, Integer>> mapSet = map.entrySet(); for(Iterator<Map.Entry<Integer, Integer>> iter=mapSet.iterator(); iter.hasNext();) { Map.Entry<Integer, Integer> entry = iter.next(); System.out.println("Key:" + entry.getKey() + ", Value:" + entry.getValue()); } Collection<Integer> col = map.values(); int maxValue = Collections.max(col); System.out.println("出现最多次数为:" + maxValue); System.out.println("这些数字有:"); for(Iterator<Map.Entry<Integer, Integer>> iter=mapSet.iterator(); iter.hasNext();) { Map.Entry<Integer, Integer> entry = iter.next(); if(entry.getValue() == maxValue) { System.out.println(entry.getKey()); } } } }
时间: 2024-10-12 14:26:18