彩票计划Java比较两个数字

时间:2013-03-10 20:57:02

标签: java numbers compare treeset

所以基本上我正在使用两个树集编写一个彩票程序,每个树集有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]

3 个答案:

答案 0 :(得分:2)

Set是要走的路。不错的选择。

您正在寻找的操作是两组的交叉点。在Java中,这实现为:

s1.retainAll(s2);

s1现在只包含<{1}}中 的元素。

然后,您可以使用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.");
}

答案 1 :(得分:1)

您可以使用Set.containsAll(Collection) link to 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集合。

答案 2 :(得分: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);

    }