我有一个关于数组的非常通用的问题。这是一个骰子滚动游戏,我必须做作业。
我有一个长度为7的数组,其中包含我的各种骰子滚动方法的结果,我需要查明数组是否包含元素的多个实例,该元素是什么,以及它发生了多少次。作为Java新手,我甚至不知道在哪里寻找可以做这种事情的方法。有谁知道我在哪里可以找到一个,或者更好,但有关于如何自己写一个的提示?
概念上对我来说最困难的部分之一就是我不知道会有多少结果,因为最多可能有两对和三重奏。 IE int [] roll = {3,3,4,4,5,5,5}。我认为解决问题的最佳方法是使用循环,直到我的多重查找方法失败,每次删除匹配的元素。
非常感谢您的帮助,这是午夜时分!
答案 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]
将包含1
中roll[]
的出现次数,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() );