2017-06-19 121 views
0

好吧,基本上我一直在試圖讓我的柱狀圖顯示星號垂直對齊的字母,它在上面遞增。我一直在試圖找出讓星號在字母重複之上排列的最有效方法。有什麼建議麼?創建一個垂直柱狀圖

**My current output displays this horizontally** 

asfklafjasjfk 
A (3) *** 
F (3) *** 
J (2) ** 
K (2) ** 
L (1) * 
S (2) ** 
ABCDEFGHIJKLMNOPQRSTUVWXYZ 

我希望它顯示這個

abcaaaabbzzzzz  
          * 
    *      * 
    **      * 
    **      * 
    ***      * 
    ABCDEFGHIJKLMNOPQRSTUVWXYZ 

我在下面列出

public class histogram { 
    public static void main(String[] args){ 
    Scanner input = new Scanner(System.in); 
    String lettersInput = input.nextLine(); 
    lettersInput=lettersInput.toUpperCase(); 
    String map = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
    int[] count = new int[map.length()]; 

    for(int x = 0; x < lettersInput.length();x++){ 

     int letter = map.indexOf(lettersInput.charAt(x)); 

     if(letter < 0){ 

      continue; 
     } 

     count[letter]++; 
    } 
    for(int x = 0; x < count.length; x++){ 

     if(count[x]< 1) 
      continue; 
     System.out.println(String.format("%s (%d) %s", 

       map.charAt(x), 

       count[x], 

       new String(new char[count[x]]).replace('\0','*'))); 
    } 

    System.out.println("ABCDEFGHIJKLMNOPQRSTUVWXYZ"); 

} 

}

+0

什麼究竟錯呢?你試圖解決什麼問題?我們不是在這裏爲你調試你的代碼。 –

+0

我正在尋求關於讓星號垂直對齊它的字母上方的最佳方法的建議。 – Dnlfgby

回答

0

我的代碼,我採取的方法是使用一個有序映射,其中的鍵是字母表中的字母,其值是數字每個字母的出現次數。只需遍歷輸入字符串即可填充地圖。然後,遍歷每行可能的輸出,併爲每個字母打印出空格或星號。我在地圖的值上使用Collections.max()來查找直方圖的高度。

TreeMap<Character, Integer> map = new TreeMap<>(); 
String input = "abcaaaabbzzzzz".toUpperCase(); 
String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 

for (int i=0; i < input.length(); ++i) { 
    Integer val = map.get(input.charAt(i)); 
    map.put(input.charAt(i), val == null ? 1 : val + 1); 
} 
Collection<Integer> c = map.values(); 
int maxFrequency = Collections.max(c); 

System.out.println("Input:\n" + input); 
for (int i=maxFrequency; i > 0; --i) { 
    for (int j=0; j < alphabet.length(); ++j) { 
     Integer count = map.get(alphabet.charAt(j)); 
     System.out.print((count != null && count >= i) ? "*" : " "); 
    } 
    System.out.println(); 
} 
System.out.println(alphabet); 

輸出:

Input: 
ABCAAAABBZZZZZ 
*      * 
*      * 
**      * 
**      * 
***      * 
ABCDEFGHIJKLMNOPQRSTUVWXYZ 

演示在這裏:

Rextester