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
4

4 回答 4

3

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

遍历您的列表并为每个元素执行以下操作:

  • 如果 HashMap 中不存在该元素,则以频率 1 插入它
  • 如果元素存在于 HashMap 中,则将频率增加 1。

最后,打印 HashMap 的键/值对将为您提供所需的输出。

于 2013-04-20T23:48:25.930 回答
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() );
    }
}
于 2013-04-21T00:07:43.803 回答
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));
}
于 2013-04-21T00:03:11.923 回答
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 的第一个值被覆盖,您所要做的就是实现一个 IF 语句,检查 $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]);
    }
}
于 2013-04-20T23:45:31.247 回答