Как мне генерировать произвольные строки массива URL без повторения? - PullRequest
0 голосов
/ 26 мая 2019

Я пытаюсь сгенерировать случайные URL-адреса массива строк в Picasso, все работает нормально, но повторяется, как будто у меня было 28 элементов массива строк, когда я запускаю приложение, некоторые элементы повторяются, но я хочу только 1 элемент за один раз при случайном запуске

Это мой код

     ImageView imageView = itemView.findViewById(R.id.imageview);
        random = new Random(); 
        int p=  random.nextInt(icons.length);
        Picasso.get().load(icons[p]).into(imageView);

Ответы [ 2 ]

0 голосов
/ 26 мая 2019

Вы можете отслеживать ранее сгенерированные целые числа в массиве / списке и проверять массив каждый раз, когда вы генерируете новое случайное число.Таким образом, если новое сгенерированное целое число уже существует в массиве, вы генерируете новое, пока не сгенерируете 28 чисел, после чего вам придется очистить массив и начать заново.

ImageView imageView = itemView.findViewById(R.id.imageview);
Random random = new Random();
List<Integer> prevInts = new ArrayList<>();
Picasso.get().load(icons[randomUniqueInteger()]).into(imageView);

public int randomUniqueInteger(){
    int p = 0;
    do {
        p = random.nextInt(icons.length);
    } while(prevInts.contains(p));

    if ((prevInts.size + 1) == icons.length){
       prevInts.clear();
    }

    prevInts.add(p);

    return p;
}
0 голосов
/ 26 мая 2019

попробуйте следующее

ImageView imageView = itemView.findViewById(R.id.imageview);
Random random = new Random();
List<Integer> cache = new ArrayList<>();
int p = 0;
do {
     p = random.nextInt(icons.length);
} while(cache.contains(p));
cache.add(p);

Picasso.get().load(icons[p]).into(imageView);
...