首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >相同的代码为Java 7和8生成不同的输出

相同的代码为Java 7和8生成不同的输出
EN

Stack Overflow用户
提问于 2015-05-27 10:07:16
回答 2查看 377关注 0票数 0

如果输入为91912323,则输出为33221199 for Java8,而在Java7中输出为11223399

问题陈述也提供给您参考。

任何帮助都将不胜感激。

由1-9位数字组成的字符串将作为输入传递.程序必须打印根据发生次数排序的数字。如果一个或多个数字出现相同的次数,则必须首先打印最小的数字。 输入格式:第一行将包含1-9的N个数字。 边界条件:3 <= N <= 30 输出格式:根据发生次数排序的数字。 示例输入/输出1: 输入: 4443338993 产出: 3333444998 说明:3次发生次数最多(4次)。因此,它是首先印刷。4发生三次,因此在3s之后印刷。9发生两次,因此在4s之后打印。8只发生一次,因此在9之后打印。 示例输入/输出2: 输入: 95559998228 产出: 99995552288 说明:在这里,2和8发生两次。因此,2是较小的数字被打印在8之前。

代码语言:javascript
复制
package E001;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;

/**
 *
 * @author Anagh
 */

public class CharOccurrences {

    public static void main(String[] args) throws IOException
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String input = br.readLine();
        char[] arr = input.toCharArray();
        HashMap<String, Integer> map = new HashMap<>();
        for(int i = 0; i < arr.length; i++)
        {
            if(!map.containsKey(String.valueOf(arr[i])))
            {
                map.put(String.valueOf(arr[i]), 1);
            }
            else
            {
                map.put(String.valueOf(arr[i]), map.get(String.valueOf(arr[i]))+1);
            }
        }
        TreeMap<String, Integer> output = sortByValue(map);
        printMap(output);

    }
    public static TreeMap<String, Integer> sortByValue (HashMap<String, Integer> map) 
    {
    ValueComparator vc =  new ValueComparator(map);
    TreeMap<String,Integer> sortedMap = new TreeMap<>(vc);
    sortedMap.putAll(map);
    return sortedMap;
    }

    private static void printMap(TreeMap<String, Integer> map) {
        String key;
        int value;
        for (Map.Entry<String, Integer> entry : map.entrySet()) 
        {
            key = entry.getKey();
            value = entry.getValue();
            for(int j = 0; j < value; j++)
            {
                System.out.print(key);
            }
    }        
    }

}
class ValueComparator implements Comparator<String> {

    Map<String, Integer> map;

    public ValueComparator(Map<String, Integer> base) {
        this.map = base;
    } 
    @Override
    public int compare(String a, String b) {
        if (map.get(a) > map.get(b)) {
            return -1;
        } else {
            return 1;
        } // returning 0 would merge keys 
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-27 10:13:21

产出: 99995552288 说明:在这里,2和8发生两次。因此,2是较小的数字,在8之前打印。

您的比较器没有实现这个逻辑。为了实现这一逻辑,应:

代码语言:javascript
复制
public int compare(String a, String b) {
    if (map.get(a) > map.get(b)) {
        return -1;
    } else if (map.get(a) < map.get(b)) {
        return 1;
    } else {
        return a.compareTo(b);
    }
}
票数 3
EN

Stack Overflow用户

发布于 2015-05-27 10:11:32

您的比较器正在破坏它的合同,您应该添加一个案例,当有确切的发生次数时,应该如何排序,例如,首先是较小的数目。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30479349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档