我正在学习Java初学者并开始研究数组。我的任务是在用户输入的两个值之间生成指定数量的随机整数。
这是我的代码:
// Variables
int amount,ur,lr,range;
System.out.println("Enter the amount of random numbers to generate::");
amount = Integer.parseInt(myInput.readLine());
System.out.println("\nEenter the upper range:");
ur = Integer.parseInt(myInput.readLine());
System.out.println("\nEnter the lower range:");
lr = Integer.parseInt(myInput.readLine());
// Create a new array that holds up to user inputted amount of variables
int[] generate = new int[amount];
// Create a range of numbers the array can randomly select as its value,
// given the user's input of the lowest and highest values available to be selected
range = (int)(Math.random() * ur) +lr;
System.out.println("\nGENERATED NUMBERS");
System.out.println("=================");
// Loop to print randomized numbers up to the amount the user inputted
for (int n=0; n < generate.length; n++){
// Give the array the value of the range
generate[amount] = range;
// Output [amount] variables
System.out.println(generate[amount]);
}
我得到的错误是
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
at randomnumbers.RandomNumbers.main(RandomNumbers.java:42)
Java Result: 1
如果有人能解释为什么会发生这种情况/它意味着什么,以及如何解决,那将会有所帮助。
答案 0 :(得分:1)
例外是由于
generate[amount] = range;
System.out.println(generate[amount]);
这应该是
generate[n] = range;
System.out.println(generate[n]);
这是因为你的数组的大小为amount
,所以它从位置0到数量-1,因此你不能使用或指定生成[金额]。
此外,您应该每次生成range
号码,因为这只是一个随机数。因此range = (int)(Math.random() * ur) +lr;
应该在循环中
答案 1 :(得分:1)
您正在使用变量generate
为数组amount
编制索引,该变量的值在从用户输入初始设置后不会更改。再想想如何引用数组元素,你可能会明白为什么这不起作用。
答案 2 :(得分:0)
需要核心的3件事:
0
索引到lengtOfArray - 1
,因此对于10个元素的数组,最后一个元素将位于array[9]
下。你永远不想使用array[sizeOfArray] = ...
这样的东西,因为它会是大数字。Math.random()
永远不会返回1(它会返回从0到几乎为1的值),所以请再次考虑你的随机化公式。for
循环之前随机生成的一个数字填充数组。我相信你想把它移动到for循环中以获得你的数组中更多的随机数。答案 3 :(得分:0)
我建议您创建一个实际的Random对象,而不是使用Math.Random(),因为您将不止一次地生成该数字
Random randomNumber = new Random();
然后在你的循环中,你会做上面其他评论建议
for(int n=0;n<generate.length;n++)
{
range = lr +randomNumber.nextInt(ur+1);
generate[n] = range;
System.out.println(generate[n]);
}
我相信这会覆盖基地...