Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> псевдослучайное число из промежутка [-n;n) 
:(
    Опции темы
turtles
Дата 22.8.2011, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 17.2.2011

Репутация: нет
Всего: нет



Здравствуйте! У меня вот такой вопрос по коду, подскажите по заданию я правильно написал код или что не правильно?
Вот задание:
Создайте программу, которая будет генерировать и выводить на экран
вещественное псевдослучайное число из промежутка [-3;3).
Код

public class MathRandom {
    public static void main(String args[]){
      final int min = -3;
      final int max = 3;
        double  ran = Math.random()* min * max;
        System.out.println("Число из промежутка -> [-3;3) = " + ran);
    }
}

PM MAIL   Вверх
LSD
Дата 22.8.2011, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Код

    private Random random = new Random();

    private int getRandom(int n) {
        n = Math.abs(n);
        return random.nextInt(n * 2) - n;
    }



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
turtles
Дата 22.8.2011, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 17.2.2011

Репутация: нет
Всего: нет



подскажите пожалуйста как правильно вычисляется промежуток или по какой формуле
если например вот такой диапазон чисел (-3;3),(-3;3],[-3;3] и [-3;3) или такой (-3;-3),(-3;-3],[-3;-3] и [-3;-3) 
PM MAIL   Вверх
dorogoyIV
Дата 22.8.2011, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 3
Всего: 46



как то так наверное...  smile 
Код

import java.util.*;

public class Test
{
 public static void main(String [] args)
 {
  int min = -3;
  int max = 3;
  int x = getRandomNumberInInterval(min, max);
  System.out.println(x);
 }

 private static int getRandomNumberInInterval(int min, int max)
 {
  int [] x = new int [max - min + 1];

  for(int i = min, j = 0; i <= max; i++, j++)
   x [j] = i;

  return x [new Random().nextInt(x.length)];
 }
}

PM MAIL   Вверх
LSD
Дата 22.8.2011, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Код

random.nextInt(n)

Генерирует числа в диапазоне [0, n). Дальше простым вычитанием получаем нужный диапазон.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
jk1
Дата 23.8.2011, 04:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 40
Всего: 75



LSD
Цитата

Создайте программу, которая будет генерировать и выводить на экран
вещественное псевдослучайное число из промежутка



--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
pathfinder
Дата 23.8.2011, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 3.3.2010

Репутация: 2
Всего: 10



jk1, целые числа являются подмножеством вещественных, следовательно алгоритм LSD корректен.

А если серьезно.

Код

private Random random = new Random();

public double getRandomIn(int min, int max) {
        // todo check input ...
    double size = (max - min);
    return min + ((random.nextDouble() * size) - (size/2));
}

PM MAIL   Вверх
LSD
Дата 23.8.2011, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(jk1 @  23.8.2011,  05:19 Найти цитируемый пост)
Создайте программу, которая будет генерировать и выводить на экран
вещественное псевдослучайное число из промежутка

Упс smile

Тогда так:
Код

    private static Random rnd = new Random();

    public static double getRandom(int min, int max) {
        if(min >= max) {
            throw new IllegalArgumentException();
        }
        int delta = max - min;
        return rnd.nextDouble() * delta + min;
    }


Добавлено через 2 минуты и 11 секунд
pathfinder у тебя ошибка в коде, getRandomIn(0, 10) может вернуть отрицательное значение.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
jk1
Дата 23.8.2011, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 40
Всего: 75



Цитата

jk1, целые числа являются подмножеством вещественных, следовательно алгоритм LSD корректен.


 smile 

Этот алгоритм нельзя называть алгоритмом генерации псевдослучайных чисел из заданного промежутка. По определению должна быть отличная от нуля вероятность выпадения любого числа из промежутка.  


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
LSD
Дата 23.8.2011, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Самое интересное это получение незамкнутых диапазонов. Типа (min, max):
Код

    private static Random rnd = new Random();

    public static double getRandom(int min, int max) {
        int delta = max - min;
        double v = rnd.nextDouble() * delta + min;
        if (v == min) {
            v = Math.nextAfter(v, max);
        } else if (v == max) {
            v = Math.nextAfter(v, min);
        }
        return v;
    }



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
danco0x53
Дата 23.8.2011, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 1.8.2011

Репутация: нет
Всего: нет



   LSD, вторая проверка излишня. JavaDoc говорит:
Цитата

The general contract of nextDouble is that one double value, chosen (approximately) uniformly from the range 0.0d (inclusive) to 1.0d (exclusive), is pseudorandomly generated and returned.

   Так что ==max не будет, если только max не будет меньше min.
PM MAIL   Вверх
antondrafff
Дата 2.9.2011, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичек



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 25.7.2008
Где: moscow

Репутация: нет
Всего: нет



Используйте нормальное распределение, моделируется так:
Код

Random rnd = new Random();
double result = 0;
for (int i=0; i < 12; ++i) {
double drnd = rnd.nextDouble();
result += drnd;
}
double randomValue = result / 6;

PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0961 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.