2010-09-01 68 views
2

我是一个java noob,并且一直在寻找一些关于如何创建这个彩票应用程序的帮助。我在这个网站上阅读了一些例子,但是一些代码对于我来说实际上实现起来有点太高级了(我不确定O(n)是如何工作的)所以我想我会在这里问我的问题,为答案。创建一个小型彩票应用程序,java

我需要创建一个非常简单的应用程序,它可以生成3个随机数并将它们与3个用户猜测进行比较。数字都是单个数字,但可以重复。例如,实际的数字可能是1,1,1,而用户可能已经猜到了1,2,3,但是奖金只会匹配用户在单个比赛中用实际数字中的任何1猜测的1。

我只需要比较2个数组我猜,并重复数字帐户。我试图创建嵌套的if语句,但有20个左右的前奏,并且非常快速地失控。亲们会做什么?

感谢所有帮助

+0

O(n)是大O表示法:http://en.wikipedia.org/wiki/Big_O_notation – Powerlord 2010-09-01 17:34:41

+0

难道我们看到获胜的一些例子猜测,并失去猜测? – jjnguy 2010-09-01 17:43:28

+0

是的,我有点难过,因为有很多潜在的奖金可以赚到。单个匹配是两个组之间匹配的任何一个数字;顺序无关紧要(例112,233;或187,843) twomatch是与2个号码匹配相同的想法;顺序无关紧要(例如234,364;或333,393),三匹配与3匹配数字(例如123,321;或979,799)相同 – 2010-09-01 18:04:27

回答

0

这是我想你会看在你的核心代码

public class Lottery{ 
    public boolean isWinner(ArrayList<?> user, ArrayList<?> lotto){ 

      if(user == null || lotto == null) 
       return false; 
      if(user.size() == 0 || lotto.size() == 0) 
       return false; 

      return lotto.containsAll(user); 
     } 
} 

这使用任何类型的ArrayList,并使用现有的containsAll()功能。

这将是很容易设置

Lottery lottery = new Lottery(); 
ArrayList<Integer> userOne = new ArrayList<Integer>(); 
ArrayList<Integer> lotto = new ArrayList<Integer>(); 

userOne.add(/*Some int value*/); //do this XX number of times as needed 
lotto.add(/*Some int value*/); //do this XX number of times as needed 

lottery.isWinner(userOne, lotto); 

编辑这将在乐透= {3,3,3}用户= {1,3,8},但休息,如果你换的情况下工作数字:lotto = {1,3,8},user = {3,3,3}。如果你知道的大小将始终是相同的,你可以尝试

if(lotto.containsAll(user)){ 
    return user.containsAll(lotto); 
} 
return false; 
0

你应该把你的号码为集合类像List(允许重复)或Set(无重复这里)。然后,您可以使用现有方法或equals()查找匹配项。

+0

哦,自动写入的原始值不断查找的限制是什么? – 2010-09-01 17:42:09

2

好了,看看如果数组包含另一个阵列中的至少一个元素,我要做到以下几点:

int[] actualNums; 
int[] guesses; 

for (int i = 0; i < actualNums.length; i++) { 
    for (int j = 0; j < guesses.length; j++) { 
     if (actualNums[i] == guesses[j]) { 
      // if you are here, you have found at least one match. 
     } 
    } 
} 
+0

是的,这将有助于检查1场比赛,但如果我有一个重复的猜测像112和实际的数字是123,我怎么会知道什么索引匹配。它会告诉我我有一场比赛,但我不知道哪些索引是我仍然必须通过并检查每个可能的结果。什么是我想知道的最有效的方法。 – 2010-09-01 18:31:37

+0

@Mateen,好吧,你可以保存你找到匹配的索引。 (如果我找到一些时间,我会更新我的答案) – jjnguy 2010-09-01 18:35:56

+0

是的,这是我需要做的,以确保我不会比较重复值。如果您有任何额外的时间,我将不胜感激:D – 2010-09-01 19:15:07

1

如果我是你,我会使用java.util.Random类。在你的情况下,你会让它像这样工作。从导入Random类开始。

import java.util.Random; 

然后创建一个随机整数0-9的数组。

int[] randomNums; 
Random generator = new Random(); //instance of a Random object 
for(int i = 0; i < 3; i++) { 
    randomNums[i] = generator.nextInt(10); //nextInt method gives int 0-9 
} 

对于用户输入的数组,除了使用自变量外,请遵循类似的过程。然后,您可以一起遍历数组,并查看它们是否匹配。如果你正在做我认为你正在做的事情,那么你必须使用嵌套for循环(其中两个,准确而言)。

+0

Random generator = new Random(); 忘记“新”。 – 2010-09-01 18:14:35

+0

我不能只使用Math.random()生成随机数并将它们放入数组中? – 2010-09-01 18:27:03

+0

来自JavaDoc - public int nextInt(int n):返回一个伪随机数,在此随机数生成器的序列中绘制的0(含)和指定值(不含)之间的均匀分布的int值 - 写入的代码将返回值为0到8,不会返回9.'generator.nextInt(10)'将返回0到9之间的值 – barrowc 2010-09-01 23:22:43