gpt4 book ai didi

java - 为什么我的 JAVA 代码中会出现此错误?

转载 作者:行者123 更新时间:2023-11-30 08:09:40 24 4
gpt4 key购买 nike

The birthday paradox says that the probability that two people in a room will have the same birthday is more than half as long as the number of people in the room (n), is more than 23. This property is not really a paradox, but many people find it surprising. Design a C++ program that can test this paradox by a series of experiments on randomly generated birthdays, which test this paradox for n =5, 10, 15, 20, . . . , 100. You should run at least 10 experiments for each value of n and it should output, for each n, the number of experiments for that n, such that two people in that test have the same birthday.

package birth;
import java.util.Random;

/* Question:
The birthday paradox says that the probability that two people in a room
will have the same birthday is more than half as long as the number of
people in the room (n), is more than 23. This property is not really a paradox,
but many people find it surprising. Design a C++ program that can
test this paradox by a series of experiments on randomly generated birthdays,
which test this paradox for n =5, 10, 15, 20, . . . , 100. You should run
at least 10 experiments for each value of n and it should output, for each
n, the number of experiments for that n, such that two people in that test
have the same birthday.
*/

public class birth {

public static final int YEAR = 365;

public static void main(String[] args)
{

int numOfPeople = 5;
int people = 5;

//DOB array
int[] birthday = new int[YEAR];



//Creates an array that represents 365 days
for (int i = 0; i < birthday.length; i++)
birthday[i] = i + 1;

//Random Number generator
Random randNum = new Random();

int iteration = 1;

//iterates around peopleBirthday array
while (numOfPeople <= 100)
{
System.out.println("Iteration: " + iteration);
System.out.println();
//Creates array to holds peoples birthday
int[] peopleBirthday = new int[numOfPeople];


//Assigns people DOB to people in the room
for (int i = 0; i < peopleBirthday.length; i++)
{
int day = randNum.nextInt(YEAR + 1);
peopleBirthday[i] = birthday[day];


}
for (int i = 0; i < peopleBirthday.length; i++)
{


//stores value for element before and after
int person1 = peopleBirthday[i];
int person2 = i + 1;

//Checks if people have same birthday
for (int j = person2; j < peopleBirthday.length; j++)
{


//Prints matching Birthday days
if (person1 == peopleBirthday[j])
{
System.out.println("P1: " + person1 + " P2: " + peopleBirthday[j]);
System.out.println("Match!!! \n");

}
}
}


//Increments the number of people in the room
numOfPeople += 5;
iteration++;
}

}
}

我收到一个错误:java.lang.ArrayIndexOutOfBoundsException: 365 我不知道我的代码有什么问题

最佳答案

如果您提供了抛出异常的确切行号(信息在您获得的错误堆栈跟踪中),那将很好,但问题很可能出现在这里:

int day = randNum.nextInt(YEAR + 1); // 365 + 1 = 366
peopleBirthday[i] = birthday[day];

Random.nextInt 的文档说:

Returns: the next pseudorandom, uniformly distributed int value between zero (inclusive) and bound (exclusive) from this random number generator's sequence.

在这种情况下,您调用 Random.nextInt 的值为 366 (365 + 1),这意味着您正在有效地读取 0365 之间的一些随机数。如果你确实得到了 365,那将使 birthday[day] 抛出越界异常,因为你的数组的最大索引是 364,不是 365

您可能打算以这种方式读取随机值:

int day = randNum.nextInt(YEAR); // 365 (exclusive)

关于java - 为什么我的 JAVA 代码中会出现此错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32282538/

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