2017-03-24 6 views
0

私はhashMapsについて何かを見たことがありますが、私たちはそれを私たちの仕事にまであげていません。あなたの答えや助言は、あなたが管理できるほど簡単なものにしておいてください。リスト内のカスタムデータ型の値を数えるには?

私はすでに作成されたカスタムデータ型を持っていて、完全にColorと呼ばれています。タイプの唯一の値は、Color.BLUE、Color.RED、Color.YELLOW、およびColor.GREENです。

私の仕事は、他の色よりも多くのColor.BLUEがある場合はColor.BLUEを返し、他の色よりもColor.REDが多い場合はColor.REDを返します。緑とカラー。黄色。

私が研究し、このコードを思い付いています

public Color callColor(List<Card> hand) { 

    int blueCards = Collections.frequency(hand, Color.BLUE); 
    int redCards = Collections.frequency(hand, Color.RED); 
    int greenCards = Collections.frequency(hand, Color.GREEN); 
    int yellowCards = Collections.frequency(hand, Color.YELLOW); 
    Color changeColorTo = Color.NONE; 

    if ((blueCards > redCards) || (blueCards > greenCards) || (blueCards > yellowCards)) { 
     changeColorTo = Color.BLUE; 
    } 

    if ((redCards > blueCards) || (redCards > greenCards) || (redCards > yellowCards)) { 
     changeColorTo = Color.RED; 
    } 

    if ((greenCards > redCards) || (greenCards > blueCards) || (greenCards > yellowCards)) { 
     changeColorTo = Color.GREEN; 
    } 

    if ((yellowCards > redCards) || (yellowCards > greenCards) || (yellowCards > blueCards)) { 
     changeColorTo = Color.YELLOW; 
    } 
    return changeColorTo; 
} 

しかし、このコードでは、彼らは間違いなくゼロにすべきではないとき、すべて0であることをblueCards、redCards、greenCards、およびyellowCardsの原因となります。

この場合、私のCollectionsの実装はまったく機能しませんでした。助けて!

+1

ためのカード数を見つけるの反復的な方法でありますか – Sanjeev

+0

@Sanjeevわかりません。コードのその部分が私たちのために提供されました。 – hattic

+1

'Color'クラスのコードを投稿できますか? – Sanjeev

答えて

2

このメソッドにはList<Card>が渡されていますが、そのリスト内の特定のColorの頻度を検索しています。だからこそ、すべてのカウントが0に等しい理由です。

+0

私たちは 'public Color callColor(List 手){'と提供され、その下にコードを書くように言われました。これをどのように編集すればよいですか? – hattic

+0

Java 8を使用している場合、 'int blueCards = hand.stream()。filter(h - > Color.BLUE.equals(h.getColor()))。count();'などのように使用できます。 – Farrandu

+0

ありがとう!!私はそれを感謝します – hattic

1

あなたの入力リストには色が入っていません。

だから、可能な問題解決が第一の色のリストにあなたのカードリストを変換することです:

hand.stream().map(Card::getColor).collect(Collectors.toList()); 

その結果、あなたは今それにCollection.frequencyを使用することができますので、あなたは、色のリストを取得します、ありません最初のカードリストに

しかし、別のコレクションを使用するなど、さまざまな方法で問題を解決できます。

0

Collections#frequencyは、指定されたコレクション内で渡されたオブジェクトの出現を検索しますが、あなたのカードのコレクションの属性を一致させたい場合があります。そのため、周波数計算ごとに0が得られます。続き

はどのようにあなたが `一覧 hand`を作っている?各色

for(Card card:hand) { 

    if(card color is equal to Color.Blue) blueCards++ 
    else if(card color is equal to Color.Red) redCards ++ 

    // same code for other colors 
} 
+0

これは大いに役立ちます!! – hattic

+0

あなたを助けてくれてうれしいよ:) – Sanjeev

関連する問題