2014-10-31 4 views
3

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

меня это до сих пор:

number = (int)(max * Math.random()) + min; 
guess = (int)(max * Math.random()) + min; 
if (guess<number) 
    { 
     guess = (int)(max * Math.random()) + min; 
     System.out.println(guess); 
    } 
else if (guess>number) 
{ 
     guess = (int)(max * Math.random()) + min; 
    System.out.println(guess); 
} 

UPDATE: Как убедиться, что он не генерирует случайное число, которое он уже создан? Компьютер получает 10 попыток угадать номер, который был сгенерирован, но я хочу сделать его логичным в том смысле, что он не будет генерировать тот, который он уже знает, является неправильным.

+1

Как насчет добавить петлю, пока вы не получите более высокую (или меньше) номер? Конечно, есть более эффективные способы, но это самая простая вещь, о которой я могу думать. –

+0

О, это сработало бы! Итак, просто зациклируйте генерацию случайного числа, пока я не получу большее число? @MatiCicero –

+0

Просто подход, хотя –

ответ

2

Что о заказе список случайных чисел ...

public static void method2() throws Exception { 
    Random rng = new SecureRandom(); 
    Set<Integer> numbers = new HashSet<>(); 
    while (numbers.size() < 3) { 
     // number only added if not already present in Set, set values are unique 
     numbers.add(rng.nextInt(MAX)); 
    } 
    List<Integer> numberList = new ArrayList<>(numbers); 
    Collections.sort(numberList); 
    // lower random at index 0, mid at index 1 
    // you can guess where the other one is hiding 
    System.out.println(numberList); 
} 

Я положил их в наборе сначала убедиться, что дубликатов нет. Конечно, если MAX имеет значение 1, это может занять некоторое время.

Одним из преимуществ этого подхода является то, что цифры должны быть хорошо распределены с 0 по MAX. Если вы используете диапазоны напрямую, вы должны иметь дело с верхними и нижними границами.

Конечно, этот подход может быть легко расширен и для работы над диапазонами, если максимальный объем значений (значительно) превышает количество номеров в списке (в данном случае всего 3).

+0

Я не думаю, что это то, что я ищу, для моей конкретной программы, однако я понимаю, откуда вы. Но существует ли более простой способ составления списка и убедитесь, что не создано ни одного обмана? –

+0

Конечно, вы можете создать список и при добавлении номеров проверить, являются ли они уникальными. Это, конечно, отлично подходит для небольшого списка. Конечно, использование «TreeSet» было бы даже лучше, но я не хотел полностью вас пугать. –

+0

Я определенно не продвинутый Java-программист, так что есть основной способ проверки для обманов и убедившись, что угадайка не равна обману –

0

Это всегда будет возвращать номера, как это: меньше < = число < = больше

number = (max * Math.random()) + min; 
    less = (number * Math.random()) + min; 
    more = ((max - number) * Math.random()) + number; 

редактировать: неверно истолкованы вопрос.

+0

Поскольку существует максимальное значение, заданное до генерирования случайного числа, и этот код позволяет случайному числу превышать это значение. –

+0

О, я сделал новый ответ. Пожалуйста, передумайте. – habitats

+0

Что делать, если: number = min, например. 0. –

0

Вы можете указать значения максимальных минимум Андере при получении случайного Nummer, как показано здесь: How do I generate random integers within a specific range in Java?

+0

Правда, но для этого вопроса вы должны напомнить себе, что у вас есть верхняя и нижняя границы, которые вы должны проверить. –

0

Если компьютерный проигрыватель получает информацию о том, что его догадка слишком низкая или слишком высокая (или правильная), вам необходимо отслеживать диапазон возможных значений, которые могут быть правильными. Первоначально это весь диапазон, min..max. После того, как вы догадываетесь значение, которое неверно, вы двигаетесь либо min или max:

if (guess<number) 
{ 
    min = guess + 1; // Don't guess any more number <= guess 
} 
else if (guess>number) 
{ 
    max = guess - 1; // Don't guess any more number >= guess 
} 
else 
{ 
    // I WIN!! 
} 

Теперь у вас всегда есть правильный диапазон допустимых догадок между min и max.

Теперь ваша логика генерации случайных чисел в пределах диапазона кажется немного выключенной. This answer на вопрос связанный в ответ @ Solver имеет правильную логику:

guess = (int)((max - min) * Math.random() + 1) + min; 
Смежные вопросы