计数数组中的整数并将计数存储在另一个中

问题描述:

我正在计数一个数组的整数并将这些整数的计数存储在另一个数组中。计数数组中的整数并将计数存储在另一个中

该代码计算整数的出现次数,但继续计算其余不同整数的余数并停止计数。代码只存储第一个整数发生的计数,没有问题。

我的问题是,计数不会重置当循环击中下一个整数,并继续从最后一个整数计数,并显示它。

如何提高我的代码以查找每个整数的整数出现?

public count() { 
    int k[] = {1,1,2,2}; 
    int t[] = {0,0,0,0,0}; 
    int count = 0; 
    System.out.println("reset count: "+count); 

    for (int f = 0; f<k.length; f++) { 
     for (int i =1; i < k.length-1; i++) { 
      for (int g = 0; g < t.length; g++) { 
       if (k[f] == i) { 
        count++; 
        System.out.println("Integer = "+i); 
        System.out.println("count: "+count); 
        t[g] = count; 
       } 
       i++; 
      } 
     } 
    } 
    System.out.println(); 
    for (int o = 0; o < t.length; o++) { 
     System.out.println("Stored int counts t" + o + " = " + t[o]); 
    } 
} 

如果您知道是什么k最大可能的元素(可以假设100),那么你可以线性解决它:

int[] t = new int[101]; //subject of change 
for (int i : k) { 
    t[i]++; 
} 

在这里,你会增加的价值ik的当前处理元素k的值为i

否则,如果你不知道的k最大可能的要素(分别,你不会知道如何初始化数组t),你可以使用一个Map

Map<Integer, Integer> map = new TreeMap<>(); 
for (int i : k) { 
    if (map.containsKey(i)) { 
     int value = map.get(i); 
     map.put(i, ++value); 
    } else { 
     map.put(i, 1); 
    } 
} 

for (Map.Entry<Integer, Integer> entry : map.entrySet()) { 
    int i = entry.getKey(); 
    int n = entry.getValue(); 
    System.out.println("The number " + i + " was found " + n + " times."); 
} 
+0

使用映射而不是数组提升知道最大元素的限制,并且可以在处理完成后构建数组。 –

+0

@ Dragos.Cojocari,只是用替代方法('Map')更新了答案。 –

+0

啊我看到没有想到使用每个循环。我也会尝试使用'Map',非常感谢! – girthquake

你可以使用HashMap将唯一值保存为键,并在迭代中检查该键是否已经存在,如果确实存在,则增加其值,否则继续。

希望这会有所帮助。