[英]Array error — won't output list of randomly generated numbers
我正在學習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
如果有人能夠解釋為什么會發生這種情況/它意味着什么,以及如何解決,那將會有所幫助。
例外是由於
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;
應該在循環內
您正在為數組建立索引,由變量amount
generate
,一旦從用戶的輸入初始設置,其值就不會更改。 再想想如何引用數組元素,你可能會明白為什么這不起作用。
3件需要核心的事情:
0
到lengtOfArray - 1
,因此對於10個元素的數組,最后一個元素將在array[9]
。 你永遠不想使用像array[sizeOfArray] = ...
這樣的東西array[sizeOfArray] = ...
因為它會是大數字。 Math.random()
永遠不會返回1(它將返回從0到幾乎為1的值),所以再次考慮你的隨機化公式。 for
循環之前隨機生成的一個數字填充數組。 我相信你想把它移動到for循環中以獲得你的數組中更多的隨機數。 我建議您創建一個實際的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]);
}
我相信這將涵蓋基地......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.