【问题标题】:Counting occurrences in array java计算数组java中的出现次数
【发布时间】:2017-03-24 19:25:39
【问题描述】:

我想计算 Java 数组中每个数字的出现次数(例如 1=?、2=?、3=?)。我的数组如何存储超过 10 个值?

int [] arryNum = new int[]{4,4,4,3,4,5,4,3,4,4,4,5,4,5,5,5,4,3,2,15,4,3,4,6,4,3,4,5,4,2,4,5,4,3,2,5,4,3,5,4,0,4,3,4,5,4,3,0,4,5,4,3,5,4,2,3,2,3,4};
     int[] counter = new int[] { 0, 0, 0, 0, 0,0 };
    for (int i = 0; i < arryNum.length; i++) {
        counter[arryNum[i] ]++;
    }

    for (int i = 0; i < counter.length; i++){
        System.out.println((i + 1) + ":" + counter[i]);
    }

【问题讨论】:

  • 使用Map&lt;Integer, Integer&gt;,键是数字,值是频率/计数器。
  • erm... sry @Thomas 我是 java 新手,我可以知道如何使用 Map 根据我的问题存储我的价值吗?
  • 查看Map Interface。 Map本身是一个接口,所以不能直接创建它的实例,但是可以创建一个子类的实例;即:Map&lt;Integer, Integer&gt; map = new HashMap&lt;Integer, Integer&gt;();。从那里,您可以使用put(K,V)get(K)containsKey(K) 方法来做您想做的事。

标签: java arrays count indexoutofboundsexception


【解决方案1】:

您可以使用 java 8 流以更简洁的方式编写它:

Map<Integer,Integer> map = new HashMap<Integer,Integer>();
Arrays.stream(arryNum).forEach(x -> map.put(x , map.computeIfAbsent(x, s -> 0) + 1));
System.out.println(map);

【讨论】:

  • 提示:对于初学者......流很可能是矫枉过正。
  • 是的,对于初学者来说,您的解决方案更合适。
【解决方案2】:
public static void main(String[] args){
    int[] arryNum = new int[] { 4, 4, 4, 3, 4, 5, 4, 3, 4, 4, 4, 5, 4, 5, 5, 5, 4, 3, 2, 15, 4,
            3, 4, 6, 4, 3, 4, 5, 4, 2, 4, 5, 4, 3, 2, 5, 4, 3, 5, 4, 0, 4, 3, 4, 5, 4, 3, 0, 4,
            5, 4, 3, 5, 4, 2, 3, 2, 3, 4 };
    Map<Integer, Integer> lookup = new HashMap<>();
    for (int key : arryNum) {
        if(lookup.containsKey(key)) {
            lookup.put(key, lookup.get(key) + 1);
        } else {
            lookup.put(key, 1);
        }
    }

    for (Integer keys : lookup.keySet()) {
        System.out.println(keys + " Found " + lookup.get(keys) + " Times");
    }

}

【讨论】:

  • 我实际上是在考虑否决您的答案,因为您在那里没有任何解释......但是见鬼。每个人都开始......但请记住:好的答案不仅仅是删除一些工作代码!
【解决方案3】:

你可以这样做。

首先你需要这张地图来计算你的东西:

Map<Integer, Integer> countsByNumbers = new HashMap<>();

然后你迭代你的数字;最好使用 for-each:

for (int number : arryNum) {
  if (countsByNumbers.containsKey(number)) {
    int newCount = countsByNumbers.get(number) +1;
    countsByNumbers.put(number, newCount);
  } else {
    countsByNumbers.put(number, 1);
  }

一些注意事项:

  1. 请注意 Maps,因为任何类型的 Java Collection 类只处理 reference 类型;因此它被声明为使用整数,而不是原始类型 int!
  2. 编译器做了一些魔术来将数组中的 int 值转换为 Integer 对象
  3. 请注意,Map 是一个接口,但我们必须实例化一个具体的类,在这种情况下,我们只需使用 HashMap

【讨论】:

  • 很好的解决方案,但您应该使用 containsKey(),Map 不存在 contains()。
  • 谢谢...修复它!
【解决方案4】:

考虑到数组中包含String值,将String放入HashMap中。 在插入每个字符串之前,检查映射中是否已经存在它的键 如果是 - 取该键的默认值,即 1,并将其递增 1 并再次插入。 如果否 - 只需添加默认值为 1 的新键 最终地图会给出“字符串”:字符串的出现次数。

public Map<String, Integer> wordCount(String[] strings) {
  Map<String, Integer> map = new HashMap();
  for(String s : strings){
    if(map.containsKey(s)){
      map.put(s, map.get(s)+1);
    }
    else
    map.put(s, 1);
  }
  return map;
}

【讨论】:

    【解决方案5】:

    包 com.report.automation;

    导入 java.util.HashMap; 导入 java.util.Map;

    公共类频率{ public static void main(String[] args){

        String value[] = {"Mukesh","Mukesh","Sasi","Senthil","Mukesh","Mukesh"};
        String match = "Mukesh";
         int count = 0;
        for (int j = 0; j <= 5; j++) {
        if (match.equals(value[j])) {       
           
            count++;                
            
        }       
        }
        System.out.println(count);
        
    }
    }
    

    【讨论】:

      猜你喜欢
      • 2015-06-19
      • 1970-01-01
      • 2017-02-13
      • 2015-06-18
      • 1970-01-01
      • 1970-01-01
      • 2011-12-27
      相关资源
      最近更新 更多