0

配列についてかなり一般的な質問があります。宿題で作らなければならないサイコロを振るゲームです。

さまざまなサイコロを振る方法の結果である int を含む長さ 7 の配列があり、配列に要素の複数のインスタンスが含まれているかどうか、その要素は何か、それが何回発生するかを調べる必要があります。Java は初めてなので、このようなことを行うメソッドをどこで探すべきかさえわかりません。どこで見つけられるか、または自分で作成する方法についてのヒントを知っている人はいますか?

概念的に私にとって最も難しい部分の 1 つは、最大 2 つのペアとトリオが存在する可能性があるため、結果がいくつになるかわからないことです。IE int[] ロール = { 3, 3, 4, 4, 5, 5, 5 }. それを回避する最善の方法は、一致する要素を削除するたびに、複数の検索方法が失敗するまでループを使用することだと思います。

助けてくれてありがとう、これは真夜中の予定です!

4

4 に答える 4

1

通常のアプローチは、 a を使用し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

最初の列はサイコロの出目で、2 番目の列は頻度です。

于 2013-10-30T00:52:22.120 に答える
0
int[7] rollCounts = {0};
for(int i=0; i<roll.length; ++i)
    rollCounts[roll[i]]++;

このメソッドを使用すると、 inrollCounts[1]の出現回数が含まれ、 inなどの出現回数が含まれます( は決して含まれるべきではないと常に仮定する必要があります)。1roll[]rollCounts[2]2roll[]rollCounts[0]0roll[i]0

次に、いくつかのロジックを使用rollCounts[i]して別のforループをチェックインし、発生回数に基づいて必要なことを行うことができます。

正直なところ、ダイスの出目が発生した順序を追跡することが重要でない限り、この配列にサイコロの出目を格納することができます。

于 2013-10-30T00:51:17.990 に答える
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);
}
于 2013-10-30T00:52:00.453 に答える
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() );
于 2013-10-30T01:38:22.007 に答える