Java 数组错误--won';t随机生成的数字的输出列表

Java 数组错误--won';t随机生成的数字的输出列表,java,arrays,random,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.print

我正在学习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]);
    }

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

异常是由于

generate[amount] = range;

System.out.println(generate[amount]);
这应该是

generate[n] = range;

System.out.println(generate[n]);
这是因为您的数组有一个大小
amount
,所以它从位置0变为amount-1,因此您不能使用或分配来生成[amount]


此外,您应该每次生成
范围
数字,因为这只是一个随机数。所以
range=(int)(Math.random()*ur)+lr
应该在循环中,通过一个变量,
amount
生成数组,该变量的值在用户输入初始设置后不会改变。再想一想如何引用数组元素,您可能会明白为什么这样做行不通。

3件需要更正的事情:

  • 数组的索引从
    0
    lengtOfArray-1
    ,因此对于10个元素的数组,最后一个元素将位于
    数组[9]
    下。您永远不想使用类似于
    数组[sizeOfArray]=…
    的东西,因为它将是一个非常大的数字
  • Math.random()
    永远不会返回1(它将返回从0到几乎1的值),因此请重新考虑您的随机化公式
  • 现在,您正在使用在
    for
    循环之前随机生成的一个数字填充数组。我相信您希望将其移动到for循环中,以便在数组中获得更多随机数

  • 我建议您不要使用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]);
        }
    

    对于(int n=0;nDude,如果你给他们答案,而不是帮助他们发现自己做错了什么,那么他们将如何真正学到任何东西?说得很好..添加了更多解释感谢进一步的解释--这有助于澄清问题。谢谢,我不得不仔细考虑,但我理解。
    
        for(int n=0;n<generate.length;n++)
        {
          range = lr +randomNumber.nextInt(ur+1);
          generate[n] = range;
          System.out.println(generate[n]);
        }