2013-03-10 65 views
0

所以基本上我正在写一个彩票计划使用两个树集,每个集有6个整数,一个用户输入和另一个随机生成。我必须将数字相互比较才能输出奖品,例如,如果两个数字匹配,那么您赢得100美元。我在如何创建这样的方法方面遇到了麻烦。任何帮助将非常感谢!彩票计划Java比较两个号码

这里是我的主,

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] 
+1

你忘了张贴相关的代码部分 – keyser 2013-03-10 20:58:24

回答

2

Set s为的路要走。好的选择。

您正在寻找的操作是路口两套。

s1.retainAll(s2); 

s1现在将只包含有s2元素:在Java中,因为这是实现的。

然后可以使用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); 
+1

有一点需要注意'Set.retainAll(集合)'是它可以修改您所呼叫中的retainAll上集合。因此,除非's1'中的所有数字都包含在's2'中,否则在您的示例中调用retainAll后,'s1'将不再包含相同的值。 – 2013-03-10 21:09:51

+0

@EmilH:的确,这就是要点:我们只想要两个集合中包含的值。然后,我们计算看看有多少*被保留*。 – wchargin 2013-03-10 21:16:39

+0

是的,只是指出显而易见的我想:)这里不是一个问题,但假设你改变了你的例子中的方法去做System.out.println,那么程序的输出将会不同。 – 2013-03-10 21:23:19

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集合。

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); 

    }