1. 程式人生 > >程式設計題--給定一個字串陣列,判斷每個字元出現次數

程式設計題--給定一個字串陣列,判斷每個字元出現次數

題目要求:給定一個字串陣列,判斷每個字元出現多少次?
解決思路:利用Map的特性:即Map集合中如果兩個key(鍵)值是一樣相同的,那麼,後放(put)入的值會將前面存在的value(值)替換掉,也就是覆蓋了前面的value。
所以把字元陣列中的字元當作key,每遇到相同的key,value值加1即可。程式碼如下:

public class HsahMapTest
{
    /**
     * 給定一個字串陣列,判斷其中每個字元出現了多少次,並列印輸出
     * @param args
     */
    public static void main(String[] args)
    {
        HashMap<String,Integer> map = new
HashMap<String,Integer>(); String[] str = {"a", "hello", "a", "hello", "b", "c","b"}; for(int i = 0; i < str.length; i ++) { if(map.get(str[i]) == null) { map.put(str[i], 1); } else { map.put(str[i], map.get(str[i])+1
); } } //遍歷map Set<String> keys = map.keySet(); for(Iterator<String> iter = keys.iterator(); iter.hasNext(); ) { String key = iter.next(); System.out.println(key + "=" + map.get(key)); } } }

執行結果:
a=2
b=2
c=1
hello=2

另一種我一開始寫錯了,但經過思考想通了為什麼得不到正確的結果,程式碼如下:

public class HsahMapTest
{
    /**
     * 給定一個字串陣列,判斷其中每個字元出現了多少次,並列印輸出
     * @param args
     */
    public static void main(String[] args)
    {
        HashMap<String,Integer> map = new HashMap<String,Integer>();
        String[] str = {"a", "hello", "a", "hello", "b", "c","b"};
        for(int i = 0; i < str.length; i ++)
        {
            if(map.get(str[i]) == null)
            {
                map.put(str[i], 1);
            }
            //出錯的地方在這個if
            if(map.get(str[i]) != null)
            {
                map.put(str[i], map.get(str[i])+1);
            }
        }
        //遍歷map
        Set<String> keys = map.keySet();
        for(Iterator<String> iter = keys.iterator(); iter.hasNext(); )
        {
            String key =  iter.next();
            System.out.println(key + "=" + map.get(key));
        }
    }
}

執行結果:
a=3
b=3
c=2
hello=3

錯誤原因分析:第一次value為null,執行第一個if時,put進值;接著再執行下一個if語句,判斷,滿足第二個if條件,於是加1。之後正常。所以總是比正確結果要多一次。