Java:计算数组中每个元素的出现次数

时间:2016-03-01 08:58:31

标签: java arrays count

我正在编写一个程序,我在其中创建一个包含0到20之间随机整数元素的100个整数元素的数组。我被告知编写一个方法来计算每个值0到20的生成次数。我试图编写这部分代码,但没有任何工作。有人可以帮我解决我做错了什么吗?这是我一直在研究的代码。

public static void arrayCounter()
{
    int[] counter = new int[21];
    for (int x = 0; x < counter.length; x++)
    {            
        for (int i = 0; i < randomArray.length; i++)
        {    
            if (i == randomArray[x])
            counter[x]++;     
        }
        System.out.println("Element " + x + " : " + counter[x] + " times");
    }
}

4 个答案:

答案 0 :(得分:1)

你在想这个,你不需要一个嵌套循环来访问数组的每个元素,你只需要一个索引。

public static int[] count(int[] array, int maxValue) {
    int[] count = new int[maxValue + 1];
    // for each value.
    for (int n : array) count[n]++; // increment the counter for that value.
    return count;
}

你可以用

来调用它
Random rand = new Random();
int[] array = new int[100];
for (int i = 0; i < array.length; i++) array[i] = rand.nextInt(21);

int[] count = count(array, 20);
for (int i = 0; i < count.length; i++)
    System.out.println(i + ": " + count[i]);

在此处运行http://ideone.com/utSNd3打印

0: 5
1: 5
2: 4
3: 6
4: 4
5: 9
6: 5
7: 9
8: 1
9: 3
10: 4
11: 11
12: 2
13: 6
14: 1
15: 6
16: 5
17: 3
18: 4
19: 4
20: 3

答案 1 :(得分:1)

你应该试试

if (x == randomArray[i])

而不是

if (i == randomArray[x])

另一种解决方案: 停止使用数组。 如果您使用Java 8或使用Java 6+的集合,则可以使用流,这应该可行:

Set<T> mySet = new HashSet<T>(Arrays.asList(someArray));
int occurrences = Collections.frequency(mySet, x);

只需添加一个循环来测试x

的每个值

答案 2 :(得分:0)

尝试像这样创建一个变量int count

 int count =0;
 for (int x = 0; x < counter.length; x++)
     {            
    for (int i = 0; i < randomArray.length; i++)
    {    
        if (randomArray[i] == randomArray[x])
        count++;     
       }
     }

    System.out.println("Element " + x + " : " + count + " times");

答案 3 :(得分:0)

另一个更动态的解决方案可能是使用array来确定出现哪个值的频率。它基本上与@PeterLawray使用的原理相同,但不是使用带有定义值的索引的key,而是首先需要知道数组的最大值,此解决方案确实使用{{ 1 {} map来识别每个值。

public static void main(String[] args) {
    int[] testArray = {0, 1, 1, 3, 4, 15, 1, 2, 3, 5};
    count(testArray);
}

public static void count(int[] array) {
    Map<Integer, Integer> counter = new HashMap<Integer, Integer>();
    for(int i : array) {
        // If the value was already found, increase it´s occurence, 
        // otherwise the value occured once yet, so we put 1 in there
        counter.put(i, counter.get(i) == null ? 1 : counter.get(i) + 1 );
    }
    for(Entry<Integer, Integer> entry : counter.entrySet()) {
        System.out.println("The value " + entry.getKey() + " appears " + entry.getValue() + " times");
    }
}