编辑答案,因为我首先读错了问题, 道歉!
好的,我们来分解一下。所以首先,我们如何检查两个数字是否连续?如果他们一个接一个。这是正确的,但我们如何通过编程来表达这一点?
它实际上很简单,如果它们之间的差值等于1,则两个数字是连续的。因此,为了检查两个数字是否连续,只需减去它们并查看结果是否为1(或-1取决于订购)。
现在,这个问题的完整解决方案稍微复杂一点。我们需要找到所有数字在您生成的乐透号码是连续的。所以,为了很好地解决这个问题,我建议把这个部分放到一个单独的方法中,叫做getConsecutiveNumbers(int [] lottoNumbers)
。这样,您已经完成了基本设置,如下所示:
// Now returns int array instead of String
public static int [] getLottoTicket(){
Random lottoNumbers = new Random(); //random object
int [] ticket = new int[6]; //6 lotto numbers
int counterr = 0;
int a;
for(int counter = 0; counter < ticket.length; ++counter){
ticket[counter] = (1 + lottoNumbers.nextInt(45)); //numbers between 1-45
}
Arrays.sort(ticket); //array class .. sorts array
return ticket;
}
public static void main(String [] args){
int a, d, n=1, t, b;
int totalConsecutives = 0;
for(int i=1; i<1000000; i++){
int counter = 0;
int [] lottoTicket = getLottoTicket();
// Keep a count of consecutives
totalConsecutives += getConsecutiveNumbers(lottoTicket);
}
System.out.println("Number of consecutives: " + totalConsecutives);
}
现在是主要部分。什么进入这个神奇的getConsecutiveNumbers()
方法?让我们来找出答案。
首先让我们写出必须放在主要方法之外的方法的签名/组成,正如我所说的需要采用整数数组,而且还需要返回连续数字的数目,如方法名称所示,如果程序询问“有多少数字是连续的?”你应该相应地回应!该方法将从此开始:
public static int getConsecutiveNumbers(int [] lottoNumbers) {
// How many
}
好的。由于您的程序设置到目前为止,我们可以假设这里给我们的乐透号码已经排序。这很好,这意味着我们只需要通过数组并逐个检查数字是否连续。我们如何做到这一点?我们也来分解一下吧。
我们需要去通过这个数组来检查每个元素,这样肯定会需要某种循环。我看到你已经使用了一个for循环,所以让我们去做。
for(int i = 0; i < lottoNumbers.length; i++) {
// Going through each number here
}
现在这里是智能部分。对于此循环的每次迭代,我们需要检查元素lottoNumbers[i]
是否与lottoNumbers[i-1]
连续。你看?在英语中,这可能意味着第二个元素与第一个元素相连,然后第三个元素与第二个元素相连,依此类推,直到i
到达数组的末尾。
但是有一个问题。在这个循环的开始处i
是零(这是我们想要的),然而在这种情况下,lottoNumbers[i-1]
将给出一个IndexOutOfBoundsException
,一个数组在索引-1处没有元素!所以为了避免这个问题,我们需要在一个而不是零处开始搜索。
public static int getConsecutiveNumbers(int [] lottoNumbers) {
// i starts at 1 not 0
for(int i = 1; i < lottoNumbers.length; i++) {
// Going through each number here
}
}
那么,我们该如何完成这项工作呢?让我们这样想。当我们通过数组时,每次数字都是连续的,只需将它添加到计数器,最后返回这个计数器。
下面是最终的解决方案:
public static int getConsecutiveNumbers(int [] lottoNumbers) {
int consecutives = 0;
// i starts at 1 not 0
for(int i = 1; i < lottoNumbers.length; i++) {
// Going through each number here
if(lottoNumbers[i] - lottoNumbers[i-1] == 1)
consecutives++; // Numbers were consecutive
}
// Return the number of consecutives
return consecutives;
}
我希望这有助于你理解问题和福利,也不仅仅是一个直线上升的答案更多!有任何问题请去问:)
Arrays.sort(ticket); http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html – 2015-02-09 20:57:17
任何连续的数字,如在一个连续的对中都会计数?另外,如果有疑问,'return {4,8,15,16,23,42};' – mbomb007 2015-02-09 20:57:25
似乎您的乐透随机器可能会多次返回相同的值......(我相信这是不可能的彩票) – gtgaxiola 2015-02-09 20:59:44