数组错误 - 不会输出随机生成的数字列表

时间:2013-06-09 00:42:23

标签: java arrays random

我正在学习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

如果有人能解释为什么会发生这种情况/它意味着什么,以及如何解决,那将会有所帮助。

4 个答案:

答案 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件事:

  1. 数组从0索引到lengtOfArray - 1,因此对于10个元素的数组,最后一个元素将位于array[9]下。你永远不想使用array[sizeOfArray] = ...这样的东西,因为它会是大数字。
  2. Math.random()永远不会返回1(它会返回从0到几乎为1的值),所以请再次考虑你的随机化公式。
  3. 现在,您正在使用在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]);
    }

我相信这会覆盖基地...