2015-09-12 1 views
1

Пожалуйста, скажите мне, верю я или нет со следующей строкой.Java - получение случайного числа от 100 до 999

int x = ((int)(Math.random() * 100000)) % 1000; 

Эта линия всегда дает мне 3 значное число 100 в 999?

Есть ли более простой способ набрать это? Я уже усложнил этот код?

+7

Ответ на ваш вопрос здесь: [Генерация случайных целых чисел в диапазоне с Java] (http://stackoverflow.com/questions/363681/generating-random-integers-in-a-range-with-java) – Pokechu22

+0

Что мешает получать номера от 0 до 100? –

ответ

6

Там есть лучший способ, чтобы получить случайные числа, и это с java.util.Random. Math.random() возвращает значение double (с плавающей запятой), но на основании вашего запроса 3-значного числа я собираюсь предположить, что то, что вы действительно хотите, является целым числом. Итак, вот что вы делаете.

// initialize a Random object somewhere; you should only need one 
Random random = new Random(); 

// generate a random integer from 0 to 899, then add 100 
int x = random.nextInt(900) + 100; 
+0

Спасибо Бен. Просто любопытно; зачем использовать 900 + 100 вместо 1000? – Jaaavaaaaa

+0

@Jaaavaaaaa Это даст вам случайное число от 0 до 999, но вы сказали, что хотите от 100 до 999. –

1

Вы не правильно. Это может привести к цифрам под 100. Самый знакомый способ - random.nextInt(900)+100. Здесь random является экземпляром Random.

Перед тем, как Java 7 не было причин создавать более одного экземпляра Random в вашем приложении для этой цели. Теперь нет никаких причин, чтобы иметь какой-либо, как лучший способ

int value = ThreadLocalRandom.current().nextInt(100, 1000); 
0

Я не думаю, что вы сделали здесь, это уместно. Вместо этого вы должны создать объект Random.

Random random = new Random(); 
int randomNumber = random.nextInt(900) + 100; 

В настоящее время randomNumber должно быть трехзначным числом.

Я написал программу, чтобы проверить, правильно ли ваш метод:

int x = 0; 
int count = 0; 
do { 
    x = ((int)(Math.random() * 100000)) % 1000; 
    count++; 
} while (Integer.toString(x).length() == 3); 
System.out.println ("Finished after " + count + " tries"); 

И говорит: «Закончен после 4 попыток», что означает, что ваш метод не является правильным.

0

В коде есть ошибка. Он может возвращать числа меньше 100. Следующая ссылка Math.random() explained имеет решение.

2

Math.random() возвращает значение между 0.0 (включая) и 1.0 (исключая) сказать возвращает 0.05013371.. (, например), чем ваш метод будет делать следующую операцию,

0.05013371.. * 100000 = 5013.371... 
(int) 5013.371... = 5013 
5013 % 1000 = 13 // Incorrect 

Но другой путь вы можете использовать Math.random() по-другому, чтобы решить это,

int upperBound = 999; 
int lowerBound = 100; 
int number = lowerBound + (int)(Math.random() * ((upperBound - lowerBound) + 1)); 

Объяснение,

100 + (int)((Number >= 0.0 and < 1.0) * (999 - 100)) + 1; 
100 + (int)((Number >= 0.0 and < 1.0) * (899)) + 1; 

MIN Это может вернуться,

100 + (int)(0.0 * (899)) + 1; 
100 + 0 + 1 
101 

MAX Это может вернуться,

100 + (int)(0.9999.. * (899)) + 1; 
100 + 898 + 1 
999 

ПРИМЕЧАНИЕ: Вы можете изменить верхняя и нижняя обязательна для получения требуемых результатов.

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