あなたの質問は、あなたがこれを難しいと感じている理由を示していると思います。1 か所で多くのことを解決しようとすると、圧倒されてしまいます。それを行うための単一のメソッドを作成する必要はありません。いくつか作成したくなるでしょう。問題を構成要素に分解することから始めます。
注: 答えを解析しやすくするために、オブジェクト指向の方法でこれに取り組んでいるわけではありません。より詳細に設計を検討することをお勧めします。
要件 1: 4 面、6 面、8 面、10 面、12 面のいずれかのタイプのサイコロを振る
わかりました-次のような方法が必要です。
int ロール (int 側);
基本的に、Roll は 1 から辺 (両端を含む) の間のランダムな値を返します。
要件 2: このタイプのダイスを 10 個までロールできる
これはおそらく for ループです。
要件 3: サイコロの半分以上が 1 の場合、バストしてプログラムを終了するというメッセージを出力します。
この要件は、Roll への各呼び出しの結果をコレクション (List または int[] (整数の配列) など) に格納することを意味します。
次に、そのコレクションを繰り返し処理し、「1」であるロールの数を数えていると述べています。カウントがロールの総数の半分を超える場合は、プログラムを終了します。カウントは簡単で (for ループまたは foreach がおそらく最善の策です)、作成されたロールの数がわかります (コレクション内のアイテムの数と、ロールが作成されたときに for ループにカウンターがあったため)。 . だから分割して比較します。
要件 4: サイコロのいずれかがロールされたサイコロの種類と等しい場合、グループから最も高い値を取ります。同様に、振ったサイコロのタイプの値に等しいサイコロを再ロールします。
繰り返しますが、結果セットを繰り返し処理し、操作リクエストを実行する必要があります。このルールを前のルールと組み合わせてソリューションを「最適化」しようとはしません。ソリューションを複雑にするだけで、実際のメリットはありません。