Java 如何使每个相同字符的计数只显示一次?

Java 如何使每个相同字符的计数只显示一次?,java,Java,我有这个代码,这是工作良好,但问题是,结果显示如下 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])

我有这个代码,这是工作良好,但问题是,结果显示如下

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 = 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的第一个值,那么您所要做的就是实现一个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]);
    }
}
publicstatic int[]countlist(char[]list){
int[]计数=新的int[list.length];
for(int k=0;k
我还不太熟悉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]);
    }
}
publicstatic int[]countlist(char[]list){
int[]计数=新的int[list.length];
for(int k=0;k
使用哈希映射保存单个字符的计数/频率

遍历列表,对每个元素执行以下操作:

  • 如果元素不在HashMap中,请以频率1插入它
  • 如果元素出现在HashMap中,则将频率增加1

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

使用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);
    }
}

存储结果的基元数组是必需的吗?您可以使用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);
    }
}
publicstaticvoidcountlist(char[]list)
{
Map Map=newhashmap();
for(int k=0;k
公共静态无效计数列表(char[]列表)
{
Map Map=newhashmap();
for(int k=0;k
正是我想说的,但你的答案更清楚,很好!正是我想说的,但你的回答更清楚,很好!是的,这是强制性的。没有Hashmap还有其他方法吗?我看到的问题是,您希望将每个字符关联到一个整数,这是不同的类型,因此我们不能使用二维数组。我会说创建一个具有char和int属性的对象,然后创建一个数组,并执行类似于Hashmap的操作。你可以这样做吗?是的,这是强制性的。没有Hashmap还有其他方法吗?我看到的问题是,您希望将每个字符关联到一个整数,这是不同的类型,因此我们不能使用二维数组。我会说创建一个具有char和int属性的对象,然后创建一个数组,并执行类似于Hashmap的操作。你可以这样做吗?