2013-04-18 3 views
1

Мне нужно сгенерировать определенное количество случайных чисел между любыми двумя значениями, указанными пользователем (пример, 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 
+0

Вы изменили код в скорректированной версии? Пожалуйста, не делайте этого - это затрудняет тем, кто читает вопрос (после того, как он был решен), чтобы понять, в чем проблема. –

+1

О, ладно, сорри! Я вернусь к оригинальной версии. – Wickeddreams

ответ

3

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

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

с

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

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

max * Math.random() + min 

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

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

Большое спасибо! – Wickeddreams

+0

Это имеет смысл сейчас ... спасибо за помощь еще раз. – Wickeddreams

+0

Yw, не забудьте [принять ответ] (http://meta.stackexchange.com/a/65088/155831), приветствия! :) – Reimeus

1

Java массивы начинаются индексирование в 0. Кроме того, ваш цикл выхода из одного индекса коротким. Итак, когда n == 6, ваше состояние тогда «x < = 5», и цикл завершается. Попробуйте следующее:

for (x = 0; x < n; x++ { 
    // stuff 
} 
+0

Спасибо большое! Это действительно помогло. – Wickeddreams

Смежные вопросы