0

私は初心者の Java コースを受講し、配列に取り組んでいます。私の課題は、ユーザーが入力した 2 つの値の間で指定された量のランダムな整数を生成することです。

これは私のコードです:

    // 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

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 に答える
0

修正が必要な 3 つのこと:

  1. 0配列は からまでインデックス付けされるlengtOfArray - 1ため、10 要素の配列の場合、最後の要素は の下になりますarray[9]array[sizeOfArray] = ...大きな数になるので、のようなものは決して使いたくありません。
  2. Math.random()1を返すことはありません(0からほぼ1までの値を返します)ので、ランダム化式をもう一度考えてください。
  3. for現在、ループの前にランダムに生成された 1 つの数値で配列を埋めています。for ループに移動して、配列内の乱数を増やしたいと思います。
于 2013-06-09T01:00:38.627 に答える