控制台输入多个数字,输出次数最多的数中的最大值

需求如标题,挺简单的,大概也就是几个循环的事吧。

但是实现起来并没有一蹴而就,应该是功力还不够。最后用较简洁的方式完成,代码如下:

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);
    }
}

结果演示:

posted @ 2017-11-08 18:06  Don1911  阅读(888)  评论(0编辑  收藏  举报