如何让每个相同的字符只显示一次计数?
我有这个代码工作正常,但结果显示如下。如何让每个相同的字符只显示一次计数?
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
我没那么熟悉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]);
}
}
使用HashMap来保存单个字符的计数/频率。
遍历列表,并为每个元素做:
- 如果该元素是不存在的HashMap中,随着频率1
- 如果该元素存在于HashMap的插入,提高频率减去1.
最后,打印HashMap的键/值对将会给你想要的输出。
存储结果的基元数组是强制的吗?您可以使用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));
}
是的,这是强制性的。有没有其他方法可以不使用Hashmap? – userpane 2013-04-21 00:53:44
我看到的问题是您想要将每个字符与一个整数相关联,这是不同的类型,所以我们不能使用二维数组。我会说创建一个char和int属性的对象,然后是它的一个数组,然后做类似于Hashmap的事情。你被允许这么做吗? – 2013-04-21 01:21:31
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());
}
}
正是我试图说,但你的回答是更清晰,美观大方! – xorinzor 2013-04-20 23:49:53