Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
Digetix
104 / 104 / 1
Регистрация: 09.04.2012
Сообщений: 651
#1

Исключить поворения из random

04.12.2012, 12:25. Просмотров 1058. Ответов 5
Метки нет (Все метки)

Доброго времени суток. Имеется код:
Java
1
2
Random rand = new Random();
int rndInt = rand.nextInt(n)+1;
Как исключить повторения n ? То есть чтоб n выпадало один раз. Сейчас n пока что равно 11.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.12.2012, 12:25
Ответы с готовыми решениями:

Как исключить число из диапазона в Random?
Есть 4 переменных: 1,2,3 и 4 - типа Integer а форме Label1 и Label2 - нужно...

Что не так с 'Random' или There is no overloaded version of 'Random' that can be called with these arguments
Доброго времени суток! Я с программированием на "Вы", поэтому очень прошу...

У меня непонятки с методами Math.random() и Random()
Задача : заполнить массив из 15 элементов случайным образом вещественными...

Random, повторы при static Random(1 seed)
Добрый вечер. Использую private static readonly Random, так как крутится в...

Когда твой Random совсем не Random
Мой код ведет себя весьма странно. У меня есть список экземпляров класса в...

5
RosPC
-6 / 3 / 0
Регистрация: 21.09.2012
Сообщений: 80
04.12.2012, 15:27 #2
Во мой код... недавно делал это для игры пятнашки....))))))


Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int[] m={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};        
        int k=15;
        for (int i=1;i<=4;i++)
            for(int j=1;j<=4;j++)
            {   
                if ((i==4) && (j==4)) {mas[i][j]=16; break;}
                int s=rand.nextInt(k);
                mas[i][j]=m[s];
                for(int z=s;z<k-1;z++)
                {
                    m[z]=m[z+1];
                    m[z+1]=0;
                }  
                k--;
            }
0
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
04.12.2012, 22:35 #3
Java
1
2
3
HashSet<Integer> set = new HashSet<Integer>();
int rndInt ;
for(rndInt = rand.nextInt(n)+1;!set .add(rndInt );rndInt = rand.nextInt(n)+1){}
Добавлено через 1 минуту
нет возможности сейчас проверить, но вроде должно работать...
1
Digetix
104 / 104 / 1
Регистрация: 09.04.2012
Сообщений: 651
05.12.2012, 00:02  [ТС] #4
Цитата Сообщение от RosPC Посмотреть сообщение
Во мой код... недавно делал это для игры пятнашки....))))))
У вас перебор идёт из 15 цифр, а у меня планируется 500.

V0v1k ваш вариант работает, хотя не знаю как проверить будет ли в дальнейшем повтор или нет
Если сейчас n=11, а потом будет около 500
0
kvaka
31 / 31 / 3
Регистрация: 26.06.2012
Сообщений: 166
05.12.2012, 10:37 #5
Вот тут я четырехзначное число загадывал - 4 числа от 0 до 9, только тут еще ноль на первом месте стоять не должен.
Думаю, суть та же - записывать отработанные числа в ArrayList и потом новое число прогонять по коллекции

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
    /**
    * Метод создает загаданное число.
    * Оно представляет собой массив из
    * 4х целых неповторяющихся цифр
    */  
private void createPuzzle(){
        
        int numbersCount = 0;
        boolean existFlag = false;
        
        while (numbersCount < 4){
            int newNumber = (int)((Math.round(Math.random() * 9)));
            for (int i = 0; i < puzzle.length; i ++) {
                if (newNumber == puzzle[i]) {
                    existFlag = true;
                    break;
                }
            }          
            if (existFlag){
                existFlag = false;
                continue;
            }
          
            if (newNumber == 0 && numbersCount == 0) 
                    continue;   
          
            puzzle[numbersCount] = newNumber;
            numbersCount ++;                            
        }   
        
        Log.i("my info", "число: " + puzzle[0] + ", " + puzzle[1] + ", " + puzzle[2] + ", " + puzzle[3]);
        
    }
0
RosPC
-6 / 3 / 0
Регистрация: 21.09.2012
Сообщений: 80
05.12.2012, 21:12 #6
Цитата Сообщение от Digetix Посмотреть сообщение
У вас перебор идёт из 15 цифр, а у меня планируется 500.

V0v1k ваш вариант работает, хотя не знаю как проверить будет ли в дальнейшем повтор или нет
Если сейчас n=11, а потом будет около 500
он точно работает я проверял... и какая разница сколько цифр, в масыв m можно програмно записать и больше цыфр... и увеличить К....
0
05.12.2012, 21:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.12.2012, 21:12

Random и объекты класса (pseudo random)
Всем привет. Есть класс: typedef unsigned int ui; class Player {...

Переделать Math.random() в random()
public static void CompMove() { int x = (int) (Math.random() * 3), y = (int)...

Random
Здравствуйте програмисты! помогите написать задачу на паскале, если честно то я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru