Вычисление среднего числа случайных чисел в массиве

Мне нужно сгенерировать определенное количество случайных целых чисел между любыми двумя значениями, указанными пользователем (например, 12 чисел от 10 до 20), а затем вычислить среднее число. Проблема в том, что если я попрослю сгенерировать 10 чисел, он сгенерирует только 9 (показано в выходных данных). Кроме того, если я введу максимальный диапазон 100 и минимальный диапазон 90, программа все равно сгенерирует # как 147 и т. д., которые превышают максимальный диапазон... я испортил генератор случайных чисел? Может кто-нибудь помочь?

Вот код, который у меня есть:

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

2 ответа

Массивы Java основаны на нуле. Здесь вы оставляете первый элемент массива по умолчанию 0, замещать

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

с

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

Изменить: Чтобы ответить на вопрос (из удаленного комментария) о том, почему это не приводит к значениям между min и max

max * Math.random () + min

Math.random генерирует двойные значения между 0.0 а также 1.0, Так, например, мин 90 и максимум 100 будет генерировать числа между и 90 а также 190(!). Чтобы ограничить значения между минимальным и максимальным, вам понадобится

min + Math.random() * (max - min)
 ^    |_________________________|                          
 |                 |
90       value between 0 - 10     

Массивы Java начинают индексирование с нуля. Также ваш цикл завершается с одним коротким индексом. Итак, когда n==6, ваше условие тогда "x <=5", и цикл завершается. Попробуй это:

for ( x = 0; x < n; x++ {
   // stuff
}
Другие вопросы по тегам