[英]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.