簡體   English   中英

相同的代碼為Java 7和8產生不同的輸出

[英]Same Code is producing different outputs for Java 7 & 8

在輸入為91912323時 ,對於Java 8,輸出為33221199 ,而在Java 7中,輸出為11223399

還提供了問題說明供您參考。

任何幫助,將不勝感激。

由1到9的數字組成的字符串將作為輸入傳遞。 程序必須打印根據出現次數排序的數字。 如果一個或多個數字出現相同的次數,則必須首先打印最小的數字。

輸入格式:第一行將包含1到9之間的N個數字

邊界條件:3 <= N <= 30

輸出格式:根據出現次數排序的數字。

輸入/輸出示例1:

輸入:4443338993

輸出:3333444998

說明:3出現次數最多(四次)。 因此,它首先被打印。 4出現三次,因此在3s之后打印。 9出現兩次,因此在4s之后打印。 8僅發生一次,因此在9之后打印。

輸入/輸出示例2:

輸入:95559998228

輸出:99995552288

說明:在這里2和8出現兩次。 因此,較小的數字2將在8之前打印。

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

您的比較器違反了合同,您應該添加一個案例,以在出現確切次數(例如,先出現較小的次數)時如何對它進行排序。

輸出:99995552288

說明:在這里2和8出現兩次。 因此,較小的數字2將在8之前打印

您的比較器沒有實現該邏輯。 為了使其實現該邏輯,應為:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM