程式設計題--給定一個字串陣列,判斷每個字元出現次數
阿新 • • 發佈:2019-02-08
題目要求:給定一個字串陣列,判斷每個字元出現多少次?
解決思路:利用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。之後正常。所以總是比正確結果要多一次。