2017-02-14 19 views
0

我的代碼工作正常,並顯示最大發生字符的計數但不顯示最大字符。 還告訴我編寫代碼的智能方式我是初學者使用散列表的最大發生字符

void checkMax1(String str1){ 
    final int hash=256; 
    char max_occ=str1.charAt(0); 

    int asc[]=new int[hash]; 
    int n=str1.length(),max_count=-1; 
    char Chars[]=str1.toCharArray(); 
    for(int i=0;i<n;i++){ 
     asc[Chars[i]]++; 
    } 
    for(int i=0;i<hash;i++){ 
     if(max_count<asc[i]){ 
      max_count=asc[i]; 
      max_occ=(char)asc[i]; 
      System.out.println(asc[i]); 
     } 

    } 
    System.out.println(max_count+""+max_occ); 
} 

}

回答

0

只需更改行保存字符

max_occ = (char) i; 

該索引是該字符的代碼,該值爲asc這個角色的數量。

代碼的變量名是一種很難理解,也許會好一點(恕我直言):

final int MAX = 255; 

int[] count = new int[MAX]; 
char maxChar = ... 
int maxCount = -1; 

和變量,按照慣例,先從較低的情況下,類與大寫接口名稱...

+0

感謝兄弟我可以做同樣不改變的字符串爲char – MOIN

+0

您可以通過使用訪問角色'str1.charAt(ⅰ)' –

0

你只需要一個額外的,如果

if(max_count<asc[i]){ 
    max_count=asc[i]; 
    System.out.println(asc[i]); 
    if(max_occ<(char)asc[i]){ 
    max_occ=(char)asc[i] 
     } 
} 
0

你可以捕捉它在相同的第一環

for (int i=0; i<n; i++) 
    if (++asc[Chars[i]] > max_occ) { 
    ++max_occ; 
    max_char = Chars[i]; 
    } 
相關問題