控制台输入多个数字,输出次数最多的数中的最大值
需求如标题,挺简单的,大概也就是几个循环的事吧。
但是实现起来并没有一蹴而就,应该是功力还不够。最后用较简洁的方式完成,代码如下:
import java.util.*; public class Test{ public double[] getArr(){ System.out.println("请输入一组数字,使用\",\"隔开,按回车结束"); Scanner in = new Scanner(System.in); String str = in.nextLine(); //得到输入的数字串 in.close(); String[] ss = str.split(","); double[] dd = new double[ss.length]; for(int i=0; i<ss.length; i++){ dd[i] = Double.valueOf(ss[i].trim()); //将数字串转换为double数组 } return dd; } public Object[] getMaxByCount(double[] dd){ Map<Integer, Double> map = new HashMap<>(); //用来存放数字出现的次数和数字本身 int res_count = 0; //用来保存次数的最大值 Object[] obj = new Object[2]; StringBuilder sb = new StringBuilder(); for(int i=0; i<dd.length; i++){ if(sb.indexOf(i + "") < 0){ //若i为重复的数字,则跳过不处理 int count = 1; for(int j=i+1; j<dd.length; j++){ if(dd[i] == dd[j]){ count++; //得到某个数出现的次数 sb.append(j+","); //将重复出现的数字的序号拼接到sb字符串中 } } if(map.containsKey(count)){ //若map中已有该次数,则当新得到的数大于已存在的数时,覆盖掉原来的数 if(dd[i] > map.get(count)) map.put(count, dd[i]); }else{ map.put(count, dd[i]); } } } System.out.println(map); Set<Integer> keys = map.keySet(); for(int key : keys){ //取出最大的次数 if(key > res_count) res_count = key; } obj[0] = res_count; obj[1] = map.get(res_count); //得到最大的次数对应的数 return obj; } public static void main(String[] args){ Test test = new Test(); double[] dd = test.getArr(); Object[] res = test.getMaxByCount(dd); int count = (int)res[0]; //出现次数最多的数的次数 double num = (double)res[1]; //出现次数最多中最大的数 System.out.println("出现次数最多的数中最大的是: "+num+", 出现次数是: "+count); } }
结果演示: