1

ユーザーが指定した任意の 2 つの値の間で指定された数のランダムな整数 (たとえば、すべて 10 から 20 の間の 12 個の数値) を生成し、数値の平均を計算する必要があります。問題は、10 個の数値を生成するように要求した場合、9 個しか生成されないことです (出力に示されています)。など、最大範囲を超えています... 乱数ジェネレーターを台無しにしましたか? 誰か助けてくれませんか?

これが私がこれまでに持っているコードです:

public class ArrayRandom
{
static Console c;           // The output console

public static void main (String[] args)
{
    c = new Console ();
    DecimalFormat y = new DecimalFormat ("###.##");

    c.println ("How many integers would you like to generate?");
    int n = c.readInt (); 
    c.println ("What is the maximum value for these numbers?");
    int max = c.readInt ();
    c.println ("What is the minimum value for these numbers?");
    int min = c.readInt ();

    int numbers[] = new int [n]; 
    int x;
    double sum = 0; 
    double average = 0; 

    //n = number of random integers generated
    for (x = 1 ; x <= n-1 ; x++) 
    {

        numbers [x] = (int) (max * Math.random () + min); 
    }

    for (x = 1 ; x <= n-1 ; x++) 
    {
        sum += numbers [x]; 
        average = sum / n-1); 

    }

    c.println ("The sum of the numbers is: " + sum); 
    c.println ("The average of the numbers is: " + y.format(average)); 

    c.println ("Here are all the numbers:"); 
    for (x = 1 ; x <= n-1 ; x++)  
{
        c.println (numbers [x]); //print all numbers in array
}


} // main method
} // ArrayRandom class
4

2 に答える 2

3

Java 配列はゼロベースです。ここでは、最初の配列要素をデフォルト値の のままにします0。交換

for (x = 1 ; x <= n-1 ; x++) 

for (x = 0 ; x < n ; x++) 

編集:これが最小値と最大値の間の値を生成しない理由の質問(現在は削除されたコメントから)に答えるには

max * Math.random () + min

Math.random0.0は、との間の double 値を生成します1.0。したがって、たとえば、min of90と max ofは、およびと(!)100の間の数値を生成します。必要な最小値と最大値の間の値を制限するには90190

min + Math.random() * (max - min)
 ^    |_________________________|                          
 |                 |
90       value between 0 - 10     
于 2013-04-18T00:13:54.123 に答える