黑马程序员技术交流社区

标题: 感觉很简单的题,可做起来就难了,大家看下? [打印本页]

作者: 黑马杨晨    时间: 2012-9-18 21:45
标题: 感觉很简单的题,可做起来就难了,大家看下?
编写一个Java应用程序,对用户输入的任意一组字符如{1,3,4,7,2,1,1,5,2},输出其中出现次数最多且数值最大的字符,并显示其出现次数?
作者: 黑马杨晨    时间: 2012-9-18 22:12
{:soso_e193:}没人看吗?
作者: 黑马杨晨    时间: 2012-9-23 14:04
大家有人会吗?
作者: 尤圣回    时间: 2012-9-23 14:26
  1. public void fun() {

  2.     int[] a = { 4, 1, 2, 4, 5, 1, 1, 1, 5, 1, 3, 4, 5 };

  3.     Arrays.sort(a);

  4.     for (int i = 0; i < a.length; i++) {

  5.         System.out.print(a[i] + " ");

  6.     }

  7.    System.out.println();

  8.    int maxNumber = a[a.length - 1], maxCount = 1;

  9.    int curNumber = a[a.length - 1], curCount = 1;

  10.    for (int i = a.length - 1; i > 0; i--) {

  11.         curNumber = a[i];

  12.         if (a[i] == a[i - 1]) {

  13.             curCount++;

  14.         } else {

  15.              System.out.println("i=" + i + ",curCount=" + curCount+ ",maxCount=" + maxCount + ",maxNumber=" + maxNumber);

  16.              if (curCount > maxCount) {

  17.                  maxCount = curCount;

  18.                  maxNumber = curNumber;

  19.              }

  20.             curCount = 1;

  21.           }

  22. }

  23.    if (curCount > maxCount) {

  24.       maxCount = curCount;

  25.    
  26. }

  27. System.out.println("curCount=" + curCount + ",maxCount=" + maxCount + ",maxNumber=" + maxNumber);

  28. }  

复制代码

作者: 官仁杰    时间: 2012-9-23 14:29
试试
  1. import java.util.Arrays;

  2. public class test{
  3.         public static void main(String[] arg){
  4.                 int a[] = {1,3,4,7,2,5,5,1,1,5,2};
  5.                 int count = 0;
  6.                 int answer = 0;
  7.                 Arrays.sort(a);
  8.                 for (int i = 0; i < a.length; i++){
  9.                         for(int j = i+1, count_tmp = 0;j< a.length;j++){
  10.                                 if(a[i] == a[j]) count_tmp++;
  11.                                 if(count <= count_tmp) {
  12.                                         count = count_tmp;
  13.                                         answer = a[i];
  14.                                 }
  15.                                
  16.                         }                           
  17.                 }
  18.                 System.out.println(answer);
  19.         }
  20. }
复制代码

作者: 张忠豹    时间: 2012-9-23 17:26
/*

可以考虑使用map集合完成。

*/
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
class  CollectionDemo
{
        public static void main(String[] args)
        {
                String str  = "2,1,3,4,7,3,2,1,1,3,5,2";
                System.out.println(str);
               
                String maxValue = getCharCount(str);

                System.out.println(maxValue);
        }

        /*
        思路:
        因为字符和次数之间存在映射关系,想到了map集合。,
        获取字符串中的每一个字母,并把字符作为键,去查map集合。
        如果没有对应的值,将该字符作为键。将1作为值存储到map集合中。

        如果有对应的值,将该值取出并自增,将该字符和自增后的结果存储到map集合中。
        这样,键重复出现,新值会覆盖旧值。

        记录了这个字符的最新出现的次数。
        当字符串中的字符都遍历完成后,map集中就记录所有字母的次数。
       

        步骤:
        1,定义map集合。
        2,将字符串变成字符数组。
        3,遍历字符数组。
        4,将遍历到的每一个字母作为键去查map集合。
        5,对通过该键获取到的值进行判断。

        */

        public static String getCharCount(String str)
        {
                //1,定义map集合。所以使用TreeMap。
                //集合中的键的类型时String,值的类型时Integer、
                Map map = new TreeMap();

                //2,将字符串变成字符串数组。
                String[] strs = str.split(",");
                int count = 0;
                //3,遍历数组。
                for(int x=0; x<strs.length; x++)
                {

                        int in = Integer.parseInt(strs[x]);
                        if(!(in>=0 && in<=9))
                                continue;
                       
                        //将遍历到的字符作为键,去查map集合中对应的值。
                        Integer value = (Integer)map.get(strs[x]);

                        if(value!=null)
                        {
                                count = value;
                        }
                        count++;
                        map.put(strs[x],count);

                        count = 0;
                }
               
                return getMaxCount(map);
               
        }
        //获取最大次数和字符
        private static String getMaxCount(Map map) {
                Set keySet = map.keySet();
                //返回一个包含此 set 中所有元素的数组;返回数组的运行时类型是指定数组的类型
                String[] arr = (String[]) keySet.toArray(new String[keySet.size()]);
                Map valueMap = new TreeMap();
                Integer max =0;
                String key ="";
                for (int ii=0;ii<arr.length;ii++) {
                        if((Integer)map.get(arr[ii])>=max) {
                                key = arr[ii];
                                max = (Integer)map.get(arr[ii]);
                                valueMap.put(key, max);
                        }
                }
                //如果出现的最大次数相同,就比较出现最大次数的数值
                if(valueMap.size()==1) {
                        System.out.println("出现次数最多且数值最大的字符是:key="+key+",其出现次数是max="+max);
                } else if(valueMap.size()>1) {
                        Set keys = valueMap.keySet();
                        //返回一个包含此 set 中所有元素的数组;返回数组的运行时类型是指定数组的类型。
                        String[] arr2 = (String[]) keys.toArray(new String[keys.size()]);
                        for(int jj=0;jj<arr2.length-1;jj++) {
                                if(Integer.parseInt(arr2[jj])>Integer.parseInt(arr2[jj+1])) {
                                        key = arr2[jj];
                                }
                        }
                        System.out.println("出现次数最多且数值最大的字符是:key="+key+",其出现次数是max="+max);
                }
                return  key;
        }
}

使用集合做的,希望对楼主有用
作者: 王海宇    时间: 2012-9-23 18:36
次数最多和和数值最大这两个特点不可能总是同时满足的吧,这样的话如果这两个特点分别在两类元素身上,那该选哪个呢??要是改成分别输出次数最多和数值最大,这样才合理。。
作者: 柳彬    时间: 2012-9-23 19:37
这道题本来就有问题,它的意思究竟是出现次数最多,如果出现次数最多不止一个就比较大小,还是数值最大出现的次数?题目有歧义?




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