首页 > 解决方案 > 用于计算在字符串 java 中找到元素出现次数的代码

问题描述

我在这里有这段代码,它会打印出在数组 [i] 的元素的数组中出现了多少个实例,这对我来说很有意义。计数永远不会超过一,我做错了什么?

import java.util.Scanner;
public class poker
{
    public static void main(String [] args)
    {
        Scanner scan = new Scanner(System.in);
        String[] array = new String[5];
        for(int i = 0; i < array.length; i++)
        {
            array[i] = scan.nextLine();
        }
        for (int i = 0; i < array.length; i++) {
            int count = 0;
            for (int j = 0; j < array.length; j++) {
                {
                    if (array[i] == array[j]) {
                        count++;
                    }

                }
                if (count >= 3) {
                    System.out.println(array[i] + " exists " + count + " times.");
                }
            }
        }
    }
}

标签: javaarraysinputcountpoker

解决方案


除非它是同一个实例,否则您对数据类型的比较String将不起作用。要检查字符串是否具有相同的字符,您应该使用.equals(). 请记住,Integer(not int) 的比较也是这样工作的。其背后的原因是这String是一个类而不是原始类型。还阅读了这篇文章

所以随着

if (array[i].equals(array[j])) {
    count++;
}

你应该没事。


附加(更易读)的解决方案

为了给你一个关于如何计算相同值的高级方法,我为你创建了一个小样本。您需要的功能是groupingBy. 在计算出现次数时,您将列表的所有值分组到一个属性中。

例子

Map<String, Long> nameAndCount = Arrays.asList(array).stream().collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));

for(Entry<String, Long> entry : nameAndCount.entrySet()) {
    System.out.println(entry.getKey() +  " exists " + entry.getValue()+ " times.");
}

推荐阅读