0

つまり、基本的には、それぞれ6つの整数を持つ2つのツリーセットを使用して宝くじプログラムを作成しています。1つはユーザーが入力し、もう1つはランダムに生成されます。賞品を出すには、数字を比較する必要があります。たとえば、2つの数字が一致した場合、100ドルを獲得できます。そのようなメソッドの作成方法に問題があります。どんな助けでも大いに感謝します!

これが私のメインです、

public static void main(String[] args)
{
    Set<Integer>s1 = createWinningNumber();
    Set<Integer>s2 = getUserNumber();

    System.out.println("Your ticket was: "+s2);
    System.out.println("Winning numbers: "+s1);

}//End of main
public static Set<Integer> getUserNumber()
{
    int set = 0;
    Set<Integer> number = new TreeSet<Integer>();
    Scanner keyboard = new Scanner(System.in);
    System.out.println("Pick your Lucky Lotto Numbers");
    System.out.print("Type 6 lotto numbers: ");
    for(int i = 0; i< 6;i++)
    {
        System.out.print("");
        set = keyboard.nextInt();
        number.add(set);
    }
    return number;  
}//End of getUserNumber

public static Set<Integer> createWinningNumber()
{
    Set<Integer> winning = new TreeSet<Integer>();
    Random generator = new Random();
    for(int i = 0;i<6;i++)
    {
        winning.add(generator.nextInt(40));
    }
    return winning;
}//End of createWinningNumber

これまでの出力

Pick your Lucky Lotto Numbers
Type 6 lotto numbers: 4 12 7 35 20 1
Your ticket was: [1, 4, 7, 12, 20, 35]
Winning numbers: [5, 8, 19, 24, 32]
4

3 に答える 3

2

Setsは行く方法です。良い選択。

あなたが探している操作は、2つのセットの共通部分です。Javaでは、これは次のように実装されます。

s1.retainAll(s2);

s1これで、にある要素のみが含まれるようになりますs2

次に、を使用s1.size()して一般的な数の数を数えることができます。

public static void main(String[] args)
{
    Set<Integer>s1 = createWinningNumber();
    Set<Integer>s2 = getUserNumber();

    System.out.println("Your ticket was: "+s2);
    System.out.println("Winning numbers: "+s1);

    s1.retainAll(s2); // s1 contains the intersection of previous s1 and s2
    System.out.println("You had " + s1.size() +
      " numbers in common with the winning number.");
}

編集:元のセットを保持したい場合は、これを試してください:

Set<Integer> s3 = new Set<Integer>(s1); // copy s1
s3.retainAll(s2);
于 2013-03-10T21:01:28.760 に答える
1

Set.containsAll(Collection) APIへのリンクを使用して、一方のセットがもう一方のセットに含まれているかどうかを確認できます。次に、サイズが一致していることを確認し、一致している場合は勝者がいることを確認できます。

s1.containsAll(s2) && s2.size().equals(s1.size())

または、次のことを行うこともできます。

s1.containsAll(s2) && s2.containsAll(s1)

2つのセットが互いにサブセットであるかどうかを確認します(したがって、同じ要素のみが含まれます)。共通する一致の数を知る必要がある場合は、WCharginが示したようにすることができます。次のような操作を行うことで、共通の番号を含む新しいセットを作成する可能性があります。

Set<Integer> commonNumbers = new TreeSet<Integer>(s1);
commonNumbers.retainAll(s2);

そうすれば、元のs1コレクションを変更しません。

于 2013-03-10T21:06:42.017 に答える
0

これは安価な解決策です

public static void main(String[] args) {
        Set<Integer> wins = new HashSet<Integer>();

        Set<Integer> winners = createWinningNumber();
        Set<Integer> numbers = getUserNumber();

        for(Integer winner : winners) {
            for(Integer number : numbers) {
                if(winner == number) {
                    wins.add(number);
                }
            }
        }

        System.out.println("Your ticket was: " + numbers);
        System.out.println("Winning numbers: " + winners);
        System.out.println("Your Winning numbers: " + wins);

    }
于 2013-03-10T21:09:20.390 に答える