0

所以基本上我正在编写一个彩票程序,使用两个树集,每个树集有 6 个整数,一个用户输入,另一个随机生成。我必须将数字相互比较才能输出奖品,例如,如果两个数字匹配,那么您将赢得 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是要走的路。好的选择。

您正在寻找的操作是两组的交集在 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)

检查这两个集合是否是彼此的子集(因此仅包含相同的元素)。如果您需要知道有多少匹配项是共同的,那么您可以按照 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 回答