Java数组中元素的乘数

时间:2013-10-30 00:45:18

标签: java arrays loops duplicates

我有一个关于数组的非常通用的问题。这是一个骰子滚动游戏,我必须做作业。

我有一个长度为7的数组,其中包含我的各种骰子滚动方法的结果,我需要查明数组是否包含元素的多个实例,该元素是什么,以及它发生了多少次。作为Java新手,我甚至不知道在哪里寻找可以做这种事情的方法。有谁知道我在哪里可以找到一个,或者更好,但有关于如何自己写一个的提示?

概念上对我来说最困难的部分之一就是我不知道会有多少结果,因为最多可能有两对和三重奏。 IE int [] roll = {3,3,4,4,5,5,5}。我认为解决问题的最佳方法是使用循环,直到我的多重查找方法失败,每次删除匹配的元素。

非常感谢您的帮助,这是午夜时分!

4 个答案:

答案 0 :(得分:1)

通常的方法是使用Map来累积频率:

int[] roll = { 3, 3, 4, 4, 5, 5, 5 };

Map<Integer, Integer> counts = new HashMap<>(roll.length);

for (int a : roll)
    counts.put(a, counts.containsKey(a) ? counts.get(a) + 1 : 1);

for (Entry<?, Integer> e : counts.entrySet())
    if (e.getValue() > 1)
        System.out.println(e.getKey() + "\t" + e.getValue());
3   2
4   2
5   3

第一列是骰子卷,第二列是频率。

答案 1 :(得分:0)

int[7] rollCounts = {0};
for(int i=0; i<roll.length; ++i)
    rollCounts[roll[i]]++;

使用此方法,rollCounts[1]将包含1roll[]的出现次数,rollCounts[2]将包含2的出现次数roll[]等等(rollCounts[0]应始终为0,假设roll[i]永远不会包含0,而不应包含rollCounts[i]

然后你可以使用一些逻辑在另一个for循环中检查{{1}},根据出现的次数做你需要做的事情。

老实说,你可以把你的骰子卷存放在这个阵列中,除非跟踪卷发生的顺序很重要。

答案 2 :(得分:0)

你不应该为此使用数组。最好的用法是Map<Integer, Integer>。键是数字,值是出现次数。以下是跟踪数字的示例代码:

Map<Integer, Integer> numbers = new Map<Integer, Integer>();
public void addNumber(int n) {
    if (numbers.get(n) == null)
        numbers.set(n, 0);
    int count = numbers.get(n);
    numbers.set(n, count + 1);
}

public int countForNumber(int n) {
    if (numbers.get(n) == null)
        return 0;
    return numbers.get(n);
}

答案 3 :(得分:0)

int[] arr = { 2, 2, 4, 4, 4, 6, 6, 6, 6 };  // Can have any length.
Map<Integer, Integer> elemCount = new HashMap<Integer, Integer>();
Integer count = 0;
for ( int element : arr )
{
    count = elemCount.get ( (Integer) element );
    if ( count == null )
    {
        count = 1;
    }
    else 
    {
        count++;
    }
    elemCount.put ( (Integer) element , (Integer) count );
}
System.out.println ( elemCount.toString() );