Форум программистов, компьютерный форум CyberForum.ru

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

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

переделать Math.random() в random() Java SE
Random. Delphi
Android Как исключить поддержку планшетов в приложении?
Random float Android
Delphi Как исключить число из диапазона в Random?
C++ Random и объекты класса (pseudo random)
Random, как избавиться от частого выпадания одинаковых чисел? Android
Java SE У меня непонятки с методами Math.random() и Random()
Исключить обфускацию для части кода Android
Исключить из контроля версий файлы среды Android
Частые повторы чисел генерируемых random Android
Android Исключить активити из списка последних закрытых приложений

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
RosPC
-6 / 3 / 0
Регистрация: 21.09.2012
Сообщений: 80
04.12.2012, 15:27     Исключить поворения из random #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--;
            }
V0v1k
1157 / 981 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
04.12.2012, 22:35     Исключить поворения из random #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 минуту
нет возможности сейчас проверить, но вроде должно работать...
Digetix
104 / 104 / 1
Регистрация: 09.04.2012
Сообщений: 647
05.12.2012, 00:02  [ТС]     Исключить поворения из random #4
Цитата Сообщение от RosPC Посмотреть сообщение
Во мой код... недавно делал это для игры пятнашки....))))))
У вас перебор идёт из 15 цифр, а у меня планируется 500.

V0v1k ваш вариант работает, хотя не знаю как проверить будет ли в дальнейшем повтор или нет
Если сейчас n=11, а потом будет около 500
kvaka
 Аватар для kvaka
29 / 29 / 3
Регистрация: 26.06.2012
Сообщений: 163
05.12.2012, 10:37     Исключить поворения из random #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]);
        
    }
RosPC
-6 / 3 / 0
Регистрация: 21.09.2012
Сообщений: 80
05.12.2012, 21:12     Исключить поворения из random #6
Цитата Сообщение от Digetix Посмотреть сообщение
У вас перебор идёт из 15 цифр, а у меня планируется 500.

V0v1k ваш вариант работает, хотя не знаю как проверить будет ли в дальнейшем повтор или нет
Если сейчас n=11, а потом будет около 500
он точно работает я проверял... и какая разница сколько цифр, в масыв m можно програмно записать и больше цыфр... и увеличить К....
Yandex
Объявления
05.12.2012, 21:12     Исключить поворения из random
Ответ Создать тему
Опции темы

Текущее время: 00:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru