Получение диапазона Math.random между 50–5000

Я хочу получить минимальное, максимальное и среднее значение массива из Math.random в диапазоне 50–5000. Это мой код ниже, но он исключает 50 каждый раз, когда я его запускаю. Я вижу, что минимум отображается 51 или иногда 52. Как мне точно получить его 50 или ниже 50 для мин, потому что макс показывает правильно. Единственная проблема - мин часть.

заранее спасибо

public class Main {

    private double max(double[] array) {
        double max = 0;

        for (int i = 0; i < array.length; i++) {
            if (array[i] > max) {
                max = array[i];
            }
        }
        return max;
    }

    public double min(double[] array) {
        double min = array[0];

        for (int i = 0; i < array.length; i++) {
            if (array[i] < min) {
                min = array[i];
            }
        }
        return min;
    }

    public static void main(String[] args) {
        double array[] = new double[1000];
        for (int i = 0; i < array.length; i++) {

            array[i] =  ((Math.random() * ((5000 - 50) + 1)) + 50);
        }

        Main main = new Main();

        double total = 0;

        for (int i = 0; i < array.length; i++) {
            total = total + array[i];
        }

        double average = total / array.length;


        System.out.println(main.max(array));
        System.out.println(main.min(array));
        System.out.println(average);


    }
}

Ваша потребность уточнить, что вы хотите. Вы хотите исключить 50? Ваш код показывает 50 как минимум или нет?

forpas 20.06.2019 21:28

Вам нужно случайное число или 50?

baao 20.06.2019 21:29

Я также хочу включить 50 как минимум, но минимум показывает даже больше, чем 50, поэтому иногда 51 или 52

Moh reza Kh 20.06.2019 21:30

Удалите этот `+ 1`.

forpas 20.06.2019 21:42

выпуск 4999 52 2554,605

Moh reza Kh 20.06.2019 21:44

@forpas i сделал min даже больше: array[i] = (int) ((Math.random() * ((5000 - 50)) + 50));

Moh reza Kh 20.06.2019 21:47

Вы получаете случайные числа, поэтому минимальное из них, скорее всего, будет больше 50.

forpas 20.06.2019 21:54

да, я знаю, но я подумал, что, предоставив этот диапазон Math.random, вы избежите этого, поэтому что я могу сделать с Math.ranom, чтобы быть ограниченным этим диапазоном

Moh reza Kh 20.06.2019 21:56
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
8
205
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Сделай это так. Это намного проще.

      Random rand = new Random();
      // generate 1000 elements between 50 inclusive and 5000 exclusive.
      double[] nums = rand.doubles(1000,50,5000).toArray();

или вы предпочитаете использовать цикл


   Random rand = new Random();
   double[] nums = new double[1000]
   for (int i = 0; i < nums.length; i++) {
      nums[i] = rand.nextDouble(4950) + 50; 
    }

Большое спасибо, я должен написать это задание на Math.random, но я попробовал ваш способ просто для проверки, даже ваш способ мин проходит 50

Moh reza Kh 20.06.2019 21:57

Когда вы говорите, что прошло 50 лет, я не уверен, что вы имеете в виду. JavaDoc говорит, что он будет сгенерирован. Но это очень редко, учитывая все возможности. Точно так же, как Math.random будет генерировать 0, но это редко.

WJS 20.06.2019 22:15

о боже, я сделал такую ​​глупую ошибку, вы абсолютно правы, ваш способ работает, мне так стыдно, что я даже не буду упоминать, что я пропустил :D

Moh reza Kh 20.06.2019 22:18

Уверяю вас, какую бы ошибку вы ни совершили, большинство из нас здесь сделали ее первыми (в тот или иной момент).

WJS 20.06.2019 22:34

Кстати, класс Random также имеет ints(), поэтому вам не нужно умножать, а затем приводить к целому числу.

WJS 20.06.2019 22:41

в этом сегменте вашего кода избавьтесь от плюса, java включает начальный номер, но исключительный в конце. попробуйте избавиться от "+1" и сделать 5000 теперь 5001.

    array[i] =  ((Math.random() * ((5000 - 50) + 1)) + 50);

array[i] = (int) ((Math.random() * ((5001 - 50)) + 50); это не помогает сейчас мин даже поднимается до 61 даже

Moh reza Kh 20.06.2019 21:52

Другие вопросы по теме