簡體   English   中英

數組錯誤 - 不會輸出隨機生成的數字列表

[英]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件需要核心的事情:

  1. 數組的索引從0lengtOfArray - 1 ,因此對於10個元素的數組,最后一個元素將在array[9] 你永遠不想使用像array[sizeOfArray] = ...這樣的東西array[sizeOfArray] = ...因為它會是大數字。
  2. Math.random()永遠不會返回1(它將返回從0到幾乎為1的值),所以再次考慮你的隨機化公式。
  3. 現在,您正在使用在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM