0

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

4 回答 4

1

异常是由于

generate[amount] = range;

System.out.println(generate[amount]);

这应该是

generate[n] = range;

System.out.println(generate[n]);

这是因为您的数组有一个大小amount,因此它从位置 0 到数量-1,因此您不能使用或分配给 generate[amount]。

此外,您应该range每次都生成该数字,因为这只是一个随机数。所以range = (int)(Math.random() * ur) +lr;应该循环内

于 2013-06-09T00:45:25.363 回答
1

You're indexing the array, generate by a variable, amount, whose value doesn't change once it has been initially set from the user's input. Think again about how to reference array elements and you'll probably see why this won't work.

于 2013-06-09T00:45:34.683 回答
0

需要纠正的三件事:

  1. 0数组从till开始索引lengtOfArray - 1,因此对于 10 个元素的数组,最后一个元素将在array[9]. 你永远不想使用类似的东西,array[sizeOfArray] = ...因为它会很大。
  2. Math.random()永远不会返回 1(它会返回从 0 到几乎 1 的值),所以再想想你的随机化公式。
  3. 现在,您正在用for循环之前随机生成的一个数字填充您的数组。我相信您想将其移入 for 循环以在数组中获取更多随机数。
于 2013-06-09T01:00:38.627 回答
0

而不是使用 Math.Random() 我建议您创建一个实际的 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]);
    }

我敢肯定,这将涵盖基础...

于 2013-06-09T01:40:57.900 回答