2013-04-20 60 views
0

我有这个代码工作正常,但结果显示如下。如何让每个相同的字符只显示一次计数?

public static int[] countlist (char[] list){ 

    int [] counts = new int[list.length]; 

    for (int k = 0; k < list.length; k++) { 

     for (int m = 0; m < list.length; m++) { 
      if (list[m] == list[k]){ 
       counts[m]++; 
      } 
     } 



     System.out.println("Letter " + list[k] + " = " + counts[k]); 
     } 
    } 

输出:

Letter T = 1 
Letter T = 2 
Letter N = 1 
Letter T = 3 
Letter Z = 1 
Letter N = 2 
Letter H = 1 
Letter H = 2 

怎么办我必须做的就是为每个字母一旦输出? 非常感谢 例如,我要输出到像下面

Letter T = 3 
Letter N = 2 
Letter Z = 1 
Letter H = 2 

回答

0

我没那么熟悉Java但我可以输入代码很快,但现在基本上可以创建一个数组,并有钥匙是字母和字母

在PHP这样的工作一样东西的价值值:

$array = array(); 

$array['T'] = 1; 
$array['T'] = 2; 
$array['T'] = 3; 
$array['N'] = 2; 
$array['Z'] = 1; 
$array['H'] = 2; 

echo print_r($array); //Resulting in T=>3, N=>2, Z=>1, H=>2 

如果你不希望(例如)T的第一个值将覆盖所有你必须要做的是实现一个我F语句检查$ array ['T']是否已经存在。

编辑: 在你提供的代码,你就必须实现它,我已经将其标记:

public static int[] countlist (char[] list){ 

    int [] counts = new int[list.length]; 

    for (int k = 0; k < list.length; k++) { 

     for (int m = 0; m < list.length; m++) { 
      if (list[m] == list[k]){ 
       counts[m]++; 
      } 
     } 

     //====Insert the code here==== 

     System.out.println("Letter " + list[k] + " = " + counts[k]); 
    } 
} 
3

使用HashMap来保存单个字符的计数/频率。

遍历列表,并为每个元素做:

  • 如果该元素是不存在的HashMap中,随着频率1
  • 如果该元素存在于HashMap的插入,提高频率减去1.

最后,打印HashMap的键/值对将会给你想要的输出。

+1

正是我试图说,但你的回答是更清晰,美观大方! – xorinzor 2013-04-20 23:49:53

0

存储结果的基元数组是强制的吗?您可以使用Hashmap并将字母定义为键和计数器作为值。

Map<Character, Integer> charactersOccurrences = new HashMap<Character, Integer>(); 

for (int k = 0; k < list.length; k++) { 
    if (charactersOccurrences.containsKey(list[k])) { 
     charactersOccurrences.put(list[k], charactersOccurrences.get(k) + 1); 
    } else { 
     charactersOccurrences.put(list[k], 1); 
    } 
} 

然后打印:

for(char aLetter : charactersOccurrences.keySet()) { 
    System.out.println("Letter " + aLetter + " = " + charactersOccurrences.get(aLetter)); 
} 
+0

是的,这是强制性的。有没有其他方法可以不使用Hashmap? – userpane 2013-04-21 00:53:44

+0

我看到的问题是您想要将每个字符与一个整数相关联,这是不同的类型,所以我们不能使用二维数组。我会说创建一个char和int属性的对象,然后是它的一个数组,然后做类似于Hashmap的事情。你被允许这么做吗? – 2013-04-21 01:21:31

0
public static void countlist (char[] list) 
{ 
    Map<Character, Integer> map = new HashMap<Character, Integer>(); 

    for (int k = 0; k < list.length; k++) 
    { 
     if (map.containsKey(list[k])) 
     { 
      map.put(list[k], map.get(list[k]) + 1); 
     } 
     else 
     { 
      map.put(list[k], 1); 
     } 
    } 

    for (Map.Entry<Character, Integer> entry : map.entrySet()) 
    { 
     System.out.println("letter = " + entry.getKey() + ", count = " + entry.getValue()); 
    } 
} 
相关问题