2014-11-23 29 views
-1

我試圖找到一種方法來使這個字母計數器操作,它必須在letterCounter類中使用數組。我很困惑如何在簡潔的情況下做到這一點。下面是我得到了這部分指令:問題計數器和數組

如果mychar是小寫字母,我們可以找到我們的數陣列中的相應位置用 簡單的減法,就像這樣: 計數[mychar - 「一」] (這是另一個魔法值,你最終想用一個常量代替。) 那麼大寫字母呢?使用靜態方法Character.toLowerCase(mychar)。 注:如果(Character.toLowerCase(mychar) - 「A」)計算結果爲東西範圍 [0,25]之外,則mychar不是一個字母,應該被忽略。 因此,您之前添加的過程方法只是遍歷字符串中傳遞的 中的字符,並且會爲每個字母增加數組中的值。 同樣,getCount方法將字符參數轉換爲位置並返回 計數。確保你理解(以及後面的文檔)當 參數不是字母表中的字母時,此方法返回的內容。

這裏是我的代碼:

import java.util.Scanner; 

public class CounterDemo 
{ 
public static void main(String[] args) 
{ 
    LetterCounter cc = new LetterCounter(); 
    cc.process("foo"); 
    cc.process("supercalafrajalisticexpialadoscious"); 
    cc.process("zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"); 

    System.out.println("There are " + cc.getCount('z') + "z's"); 
} 
} 

public class LetterCounter { 

public int getCount(char letter) 
{ 
    // empty method for now 

    return 0; 
} 

public void process(String string) { 
    // TODO Auto-generated method stub 

} 

} 

所以我會只是存儲在一個陣列0-25,並要求退回的信件,如果它是陣列中的?

回答

0

是,你的解決方案是一個很好的解決方案,因此步驟是:(僞碼)

LetterCount類: - 已陣列計數[25]

過程FUNC:

  • 掃描每個字符

  • 如果char -'a'不是字母:繼續

  • 計數[炭 - 'A'] ++(實際上 'A' 代表97,是ascii值)

getCount將FUNC

  • 返回計[param.tolowercase - '一個']
0

這是基本的解決方案...你仍然需要過濾getCount將僅售字母字符的結果,但是相當多了

public class LetterCounter 
{ 
    public LetterCounter() 
    { 
     hash = new int[255]; 

     for (int i = 0; i < hash.length(); i++) hash[i] = 0; 
    } 

    private int[] hash; 

    public int getCount(char letter) 
    { 
     return hash[(int)letter)]; 
    } 

    public void process(String string) 
    { 
     for (int i = 0; i < string.length(); i++) 
     { 
     hash[(int)string.charAt(i)]++; 
     } 
    } 

}