2015-11-13 44 views
1

我想編寫一個程序,它接受一個字符串文本,計算的array.and內的英文,並存儲每個字母的出現打印結果是這樣的:如何陣列使用ASCII

java test abaacc 
a:*** 
b:* 
c:** 

* - 信件出現多少次。

public static void main (String[] args) { 
    String input = args[0]; 
    char [] letters = input.toCharArray(); 
    System.out.println((char)97); 
    String a = "a:"; 
    for (int i=0; i<letters.length; i++) { 
     int temp = letters[i]; 
     i = i+97; 
     if (temp == (char)i) { 
     temp = temp + "*"; 
     } 
     i = i - 97; 
    } 
    System.out.println(temp); 
} 
+1

所以一定大小的數組'多少信字母(26?)',然後遞增1該索引每次出現這樣的字母 – 3kings

+0

是否區分大小寫,例如分別計算'A'和'a'?正如@ 3kings所說的,你可以有一個數組,按照字母在數組中的位置進行索引。您可以通過減去ascii值來快速計算此索引,例如, 'g' - 'a'會給你6.如果不區分大小寫,你將需要轉換爲小寫,或者如果字母是大寫,則從中減去'A'。如果區分大小寫,則需要兩倍大的數組,並確定將它們放在哪裏。 – DBug

回答

2

寫入(char)97使得代碼不易讀。使用'a'

正如3kings在評論中所說,你需要一個26個計數器的陣列,每個英文字母的一個字母。

你的代碼還應該處理大寫和小寫字母。

private static void printLetterCounts(String text) { 
    int[] letterCount = new int[26]; 
    for (char c : text.toCharArray()) 
     if (c >= 'a' && c <= 'z') 
      letterCount[c - 'a']++; 
     else if (c >= 'A' && c <= 'Z') 
      letterCount[c - 'A']++; 
    for (int i = 0; i < 26; i++) 
     if (letterCount[i] > 0) { 
      char[] stars = new char[letterCount[i]]; 
      Arrays.fill(stars, '*'); 
      System.out.println((char)('a' + i) + ":" + new String(stars)); 
     } 
} 

測試

printLetterCounts("abaacc"); 
System.out.println(); 
printLetterCounts("This is a test of the letter counting logic"); 

輸出

a:*** 
b:* 
c:** 

a:* 
c:** 
e:**** 
f:* 
g:** 
h:** 
i:**** 
l:** 
n:** 
o:*** 
r:* 
s:*** 
t:******* 
u:* 
+0

@Dana您必須導入['java.util.Arrays'](http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html)。如果你使用IDE,它應該告訴你這一點。如果您沒有使用IDE,那麼現在就拿一個,例如[Eclipse](http://www.eclipse.org/home/index.php),[NetBeans](https://netbeans.org/),... – Andreas