首先我读错了问题,对不起,答案很抱歉!
好吧,让我们分手吧。那么首先,我们如何检查两个数字是否连续?如果他们一个接一个。这是正确的,但是我们如何通过编程来表达呢?
这实际上非常简单,如果两个数字之间的差等于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;}
希望这可以帮助您理解问题并为您带来更多收益,而不仅仅是一个简单的答案!如有任何疑问,请问:)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)