我在Java编程方面相对较新。
我有一个类的任务,我必须使用从0到100的随机数填充数组。但是,用户需要能够定义插入此数组中的随机数的数量。为此,我创建了变量' n'现在。
我认为我已经将大部分代码锁定了。我想尝试使用Random类来创建随机数,而不是math.random * 100。
我收到错误:
线程中的异常" main" java.lang.ArrayIndexOutOfBoundsException: 10在CreateArray.main(CreateArray.java:11)
这是我的代码:
import java.util.Scanner;
import java.util.Random;
public class CreateArray{
public static void main(String [] args){
int n = 10;
Random myrandom = new Random();
int[] engine = new int[n]; // Initialising my array and giving it the name engine, I'm also passing value 'n' to my array length
engine[n] = myrandom.nextInt(100-0); //This exclues 100 and 0, to include those I would say +100 or +0
for(int i=0; i < engine.length; i++){ //Using a for loop to cycle through my array and print out its elements
System.out.println(engine[i]); //Printing out my array
}
}
}
答案 0 :(得分:1)
engine[n] = myrandom.nextInt(100-0);
这应该是这样的:
engine[n-1] = myrandom.nextInt(99)+1; // To exclude 0 and 100.
Java数组范围为0
到n-1
。数组的最后一个元素是n-1
而不是n
。您正在访问n
索引,该索引甚至不在范围内。
用于将元素添加到数组中。如果使用循环添加它们,则无需单独添加最后一个元素的值。它将在循环中得到关注。
for(int i=0; i < engine.length; i++) {
engine[i] = myrandom.nextInt(99)+1; // To exclude 0 and 100.
}
答案 1 :(得分:1)
至于您的错误,数组的大小为n
,因此数组中的索引将从0
到n-1
。你在帖子中显示的代码试图将一个随机变量放在一个不存在的数组末尾的索引中(它是'超出数组的边界',因此是ArrayIndexOutOfBoundsException
)。当n=10
时,您的数组将包含索引0
到9
,并且您尝试将值放在索引10
。
相反,您希望使用随机整数初始化数组中的每个索引,因此您需要循环遍历数组,就像打印数组一样,并为每个索引创建一个新的随机变量。
要生成随机数,如果您使用的是Java 1.7或更高版本,则可以使用ThreadLocalRandom
。有关在Java中生成随机数的“正确”方法(无论您是否使用Java 1.7+),请参阅this great answer。
如果使用Java&lt; 1.7,在一个范围内生成随机数的“标准”方法如下所示:
public static int randInt(int min, int max) {
//you can initialize your Random in a number of different ways. This is just one.
Random rand = new Random();
int randomNum = rand.nextInt((max - min) + 1) + min;
return randomNum;
}
请注意,在您的代码中,您提到myrandom.nextInt(100-0);
将为您提供0到100之间的数字,不包括0和100.这不完全正确。这将为您提供0到99之间的数字,包括 0和99。
由于您知道您只需要1到99之间的数字,因此您可以使用上述方法插入这些数字来获取此数据。
public static int randInt() {
Random rand = new Random();
return rand.nextInt(99) + 1;
}
由于这基本上是一个单行程序,因此它并不需要自己的方法,因此您可以生成随机数并将其存储在引擎数组中而不使用此方法。
Random myrandom = new Random();
for (int i=0; i < engine.length; i++) {
engine[i] = myrandom.nextInt(99) + 1;
}
最后,使用Java 1.7+,您可以使用ThreadLocalRandom
,您可以在不初始化Random
实例的情况下使用它。这就是使用它的样子。
for (int i=0; i < engine.length; i++) {
engine[i] = ThreadLocalRandom.current().nextInt(1, 100);
}