在Java中查找连续数

在Java中查找连续数,第1张

在Java中查找连续

首先我读错了问题,对不起,答案很抱歉!

好吧,让我们分手吧。那么首先,我们如何检查两个数字是否连续?如果他们一个接一个。这是正确的,但是我们如何通过编程来表达呢?

这实际上非常简单,如果两个数字之间的差等于1,则两个数字是连续的。因此,要检查两个数字是否连续,只需将它们相减,看看结果是否为1(或-1,取决于顺序)。

现在,解决此问题的完整方法要复杂一些。我们需要在您生成的乐透号码中找到连续的 所有
号码。因此,为了更好地进行分解,我建议将这一部分放入一个单独的方法中,称为

getConsecutiveNumbers(int []lottoNumbers)
。这样,您已经完成了基本设置,如下所示:

// Now returns int array instead of Stringpublic 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()
方法有什么用?让我们找出答案。

首先,让我们编写必须放在main方法之外的方法的签名/组成,因为我说过它需要采用一个整数数组,但还需要返回连续数字的数量作为方法名称建议,如果程序询问“连续多少个数字?”
您应该做出相应的反应!该方法将像这样开始:

public static int getConsecutiveNumbers(int [] lottoNumbers) {    // How many}

好的。到目前为止,由于您的程序的设置方式,我们可以假定此处分配给我们的乐透号码已经排序。这很好,这意味着我们只需要遍历数组并逐个检查数字是否连续即可。您说我们将如何做?我们也将其分解。

我们需要 遍历 数组以检查每个元素,因此肯定需要某种循环。我看到您已经使用了for循环,让我们开始吧。

for(int i = 0; i < lottoNumbers.length; i++) {    // Going through each number here}

现在这是最聪明的部分。对于此循环的每次迭代,我们需要检查element

lottoNumbers[i]
是否连续到
lottoNumbers[i-1]
。你看?用英语,这可能意味着第二个元素与第一个元素是连续的,然后第三个元素与第二个元素是连续的,依此类推,直到
i
到达数组的末尾。

但是
有一个问题。在循环开始时

i
为零(这是我们想要的),但是在这种情况下,
lottoNumbers[i-1]
将给出一个
IndexOutOfBoundsException
,数组在索引-1处没有元素!因此,为避免此问题,我们需要从1开始而不是从0开始搜索。

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

希望这可以帮助您理解问题并为您带来更多收益,而不仅仅是一个简单的答案!如有任何疑问,请问:)



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5094423.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-16
下一篇 2022-11-16

发表评论

登录后才能评论

评论列表(0条)

保存