如何修复:线程中的异常;“主要”;java.lang.ArrayIndexOutOfBoundsException“;java中随机数的布尔数组
我正在制作一个程序,在这个程序中,我可以得到他们想要的随机数和他们想要达到的最大数,但当我运行代码时,它并没有给出他们想要的数字数量。它要么给我一个数字,要么没有。然后它说“线程中的异常”main“java.lang.ArrayIndexOutOfBoundsException:9 在practice4.practice4.main(practice4.java:38)中,红色的 在此代码中,您访问的是数组的一些随机索引,这些索引甚至可能不存在,例如,您将如何修复:线程中的异常;“主要”;java.lang.ArrayIndexOutOfBoundsException“;java中随机数的布尔数组,java,arrays,random,indexoutofboundsexception,Java,Arrays,Random,Indexoutofboundsexception,我正在制作一个程序,在这个程序中,我可以得到他们想要的随机数和他们想要达到的最大数,但当我运行代码时,它并没有给出他们想要的数字数量。它要么给我一个数字,要么没有。然后它说“线程中的异常”main“java.lang.ArrayIndexOutOfBoundsException:9 在practice4.practice4.main(practice4.java:38)中,红色的 在此代码中,您访问的是数组的一些随机索引,这些索引甚至可能不存在,例如,您将25作为随机数,而您的数组大小为6,因此
25
作为随机数,而您的数组大小为6,因此,当您访问numberUsed[25]时,您会得到索引自动边界的此例外情况
在此代码中,您访问的是数组的一些随机索引,这些索引可能根本不存在,例如,您将
25
作为随机数,而当您访问numberUsed[25]时,您的数组大小仅为6在您的案例中,您会遇到IndexOutOfBounds
的异常情况。您似乎需要使用布尔数组来验证之前未生成的生成数字,在这种情况下,这是您需要的核心逻辑
int[] lotteryNumbers = new int[numsInLottery];
boolean[] lotteryNumberHasBeenGenerated = new boolean[highestNumber];
for(int i=0;i<highestNumber;i++){ //none of the numbers have been generated at this point
lotteryNumberHasBeenGenerated[i]=false;
}
for (int i = 0; i < numsInLottery; i++) {
int random;
do{
random=((Double)(Math.random() * highestNumber)).intValue();
}while(lotteryNumberHasBeenGenerated[random]);
lotteryNumbers[i] = random;
lotteryNumberHasBeenGenerated[random]=true; //the number is maked as generated
}
int[]lotteryNumbers=newint[numsInLottery];
boolean[]lotteryNumberHasBeenGenerated=新布尔值[highestNumber];
对于(int i=0;i,在您的案例中,似乎需要使用布尔数组来验证之前未生成的数字,在这种情况下,这是您需要的核心逻辑
int[] lotteryNumbers = new int[numsInLottery];
boolean[] lotteryNumberHasBeenGenerated = new boolean[highestNumber];
for(int i=0;i<highestNumber;i++){ //none of the numbers have been generated at this point
lotteryNumberHasBeenGenerated[i]=false;
}
for (int i = 0; i < numsInLottery; i++) {
int random;
do{
random=((Double)(Math.random() * highestNumber)).intValue();
}while(lotteryNumberHasBeenGenerated[random]);
lotteryNumbers[i] = random;
lotteryNumberHasBeenGenerated[random]=true; //the number is maked as generated
}
int[]lotteryNumbers=newint[numsInLottery];
boolean[]lotteryNumberHasBeenGenerated=新布尔值[highestNumber];
对于(inti=0;i,正如我前面提到的,我假设你的教授希望你使用一个布尔数组来检查随机生成的数字是否已经存在
实现这一点的一种方法是创建一个布尔数组(isLotteryNumberGenerated
),其中每个元素表示该元素的索引号是否已生成的指示(例如,如果生成随机数3,则检查isLotteryNumberGenerated[3]==true
,true
表示数字3已经生成(如果false
,则反之亦然)。因此,布尔数组的大小必须为highestNumber+1
,以便为可能生成的每个数字创建索引(从0到highestNumber)
每次为lotteryNumbers
数组中的元素i
生成一个随机数时,您需要检查是否已经为另一个lotteryNumbers
元素生成了该随机数。在下面的代码中,我使用了一个do…while
循环,该循环不断迭代,直到它生成一个以前未生成的数为止矿石
使用上面的一些White_King代码
public void lottery() {
System.out.println("How many numbers are in your lottery?");
int numsInLottery = TextIO.getInt();
System.out.println("What is the highest possible number?");
int highestNumber = TextIO.getInt();
int[] lotteryNumbers = new int[numsInLottery];
boolean[] isLotteryNumberGenerated = new boolean[highestNumber + 1];
for (int i = 0; i < numsInLottery; i++) {
do {
lotteryNumbers[i] = (int) (Math.random() * (highestNumber + 1));
} while (isLotteryNumberGenerated[lotteryNumbers[i]]);
isLotteryNumberGenerated[lotteryNumbers[i]] = true;
}
System.out.println("Lottery numbers:\n" + Arrays.toString(lotteryNumbers));
}
公开作废彩票(){
System.out.println(“您的彩票中有多少号码?”);
int numsInLottery=TextIO.getInt();
System.out.println(“可能的最高数字是多少?”);
int highestNumber=TextIO.getInt();
int[]lotteryNumbers=新int[numsInLottery];
布尔值[]isLotteryNumberGenerated=新布尔值[highestNumber+1];
对于(inti=0;i
正如我前面提到的,我假设你的教授希望你使用一个布尔数组来检查随机生成的数字是否已经存在
实现这一点的一种方法是创建一个布尔数组(isLotteryNumberGenerated
),其中每个元素表示该元素的索引号是否已生成的指示(例如,如果生成随机数3,则检查isLotteryNumberGenerated[3]==true
,true
表示数字3已经生成(如果false
,则反之亦然)。因此,布尔数组的大小必须为highestNumber+1
,以便为可能生成的每个数字创建索引(从0到highestNumber)
每次为lotteryNumbers
数组中的元素i
生成一个随机数时,您需要检查是否已经为另一个lotteryNumbers
元素生成了该随机数。在下面的代码中,我使用了一个do…while
循环,该循环不断迭代,直到它生成一个以前未生成的数为止矿石
使用上面的一些White_King代码
public void lottery() {
System.out.println("How many numbers are in your lottery?");
int numsInLottery = TextIO.getInt();
System.out.println("What is the highest possible number?");
int highestNumber = TextIO.getInt();
int[] lotteryNumbers = new int[numsInLottery];
boolean[] isLotteryNumberGenerated = new boolean[highestNumber + 1];
for (int i = 0; i < numsInLottery; i++) {
do {
lotteryNumbers[i] = (int) (Math.random() * (highestNumber + 1));
} while (isLotteryNumberGenerated[lotteryNumbers[i]]);
isLotteryNumberGenerated[lotteryNumbers[i]] = true;
}
System.out.println("Lottery numbers:\n" + Arrays.toString(lotteryNumbers));
}
公开作废彩票(){
System.out.println(“您的彩票中有多少号码?”);
int numsInLottery=TextIO.getInt();
System.out.println(“可能的最高数字是多少?”);
int highestNumber=TextIO.getInt();
int[]lotteryNumbers=新int[numsInLottery];
布尔值[]isLotteryNumberGenerated=新布尔值[highestNumber+1];
对于(inti=0;i
为什么要使用布尔[]
呢?我的教授说我们必须使用布尔[]。randomNum=Math.random()*最高位的数字+1;
会产生一个介于1和30之间的数字(给定您的输入)。numberUsed
只有6个元素,所以您使用numberUsed[display-1]
是什么导致了这个问题呢为什么要用布尔[]
呢?我的教授说我们
public void lottery() {
System.out.println("Welcome to the Lottery Number Generator!");
System.out.println("How many numbers are in your lottery?");
int numsInLottery = TextIO.getInt();
System.out.println("What is the highest possible number?");
int highestNumber = TextIO.getInt();
int[] lotteryNumbers = new int[numsInLottery];
boolean[] lotteryNumberHasBeenGenerated = new boolean[highestNumber];
for(int i=0;i<highestNumber;i++){ //none of the numbers have been generated at this point
lotteryNumberHasBeenGenerated[i]=false;
}
for (int i = 0; i < numsInLottery; i++) {
int random;
do{
random=((Double)(Math.random() * highestNumber)).intValue();
}while(lotteryNumberHasBeenGenerated[random]);
lotteryNumbers[i] = random;
lotteryNumberHasBeenGenerated[random]=true; //the number is maked as generated
}
System.out.println("Lottery numbers:\n" + Arrays.toString(lotteryNumbers));
}
public void lottery() {
System.out.println("How many numbers are in your lottery?");
int numsInLottery = TextIO.getInt();
System.out.println("What is the highest possible number?");
int highestNumber = TextIO.getInt();
int[] lotteryNumbers = new int[numsInLottery];
boolean[] isLotteryNumberGenerated = new boolean[highestNumber + 1];
for (int i = 0; i < numsInLottery; i++) {
do {
lotteryNumbers[i] = (int) (Math.random() * (highestNumber + 1));
} while (isLotteryNumberGenerated[lotteryNumbers[i]]);
isLotteryNumberGenerated[lotteryNumbers[i]] = true;
}
System.out.println("Lottery numbers:\n" + Arrays.toString(lotteryNumbers));
}