Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何修复:线程中的异常;“主要”;java.lang.ArrayIndexOutOfBoundsException“;java中随机数的布尔数组_Java_Arrays_Random_Indexoutofboundsexception - Fatal编程技术网

如何修复:线程中的异常;“主要”;java.lang.ArrayIndexOutOfBoundsException“;java中随机数的布尔数组

如何修复:线程中的异常;“主要”;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,因此

我正在制作一个程序,在这个程序中,我可以得到他们想要的随机数和他们想要达到的最大数,但当我运行代码时,它并没有给出他们想要的数字数量。它要么给我一个数字,要么没有。然后它说“线程中的异常”main“java.lang.ArrayIndexOutOfBoundsException:9 在practice4.practice4.main(practice4.java:38)中,红色的

在此代码中,您访问的是数组的一些随机索引,这些索引甚至可能不存在,例如,您将
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));

}