gpt4 book ai didi

java - 在 Java 中查找连续的数字

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:45:16 31 4
gpt4 key购买 nike

我正在尝试使用蒙特卡罗算法找出下周乐透号码包含连续号码的概率。我决定对数字进行排序可能会更容易实际找到连续的数字,但在网络上进行大量搜索后,似乎没有什么能真正帮助我找到我正在寻找的东西

import java.util.Random;
import java.util.Arrays;
public class lotto {
public static String getLottoTicket(){
String lottoTicket = "";
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
for(int counter = 0; counter < ticket.length; ++counter ){
lottoTicket += ticket[counter];
lottoTicket += " ";
}

return lottoTicket;
}
public static void main( String [] args ){
int a, d, n=1, t, b;
for(int i=1; i<1000000; i++){
int counter = 0;
System.out.println( getLottoTicket() );
}
}
}

这就是我到目前为止所拥有的,我知道我将使用计数器来查找超过一百万个结果的连续数,但我只是对如何实际找到连续数感到困惑

最佳答案

编辑了答案,因为我首先读错了问题,抱歉!

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

其实很简单,如果两个数之间的差等于 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() 方法有什么用?让我们找出答案。

首先让我们编写必须放在 main 方法之外的方法的签名/构成,正如我所说,它需要接受一个整数数组,但它也需要返回连续数字的数量,如方法名称表明,如果程序询问“有多少个数字是连续的?”你应该做出相应的回应!该方法将像这样开始:

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 处没有元素!因此,为了避免这个问题,我们需要从 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;
}

我希望这能帮助您理解问题并让您受益,而不仅仅是一个直接的答案!有任何问题请问:)

关于java - 在 Java 中查找连续的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28419113/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com