2015-05-27 115 views
0

在給予輸入作爲它給出爲爲Java 8輸出而在Java 7的輸出是。相同的代碼產生針對Java 7&不同輸出8

該問題陳述也提供供您參考。

任何幫助,將不勝感激。

由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

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

看來有趣的問題,但你可以在功能日誌發現這一點爲自己,你發佈大量的代碼在這裏,不要指望任何人對其進行調試爲你 – Lrrr

回答

3

輸出: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); 
    } 
} 
3

你的比較是打破合同,你應該增加的情況下,應該如何進行排序時,有occurances的確切數量,例如較小的數字印刷第一。

+0

這是否意味着評論? – CKing

相關問題