Текущая песня дублируется после перемешивания. Мне нужно руководство по предотвращению дублирования - PullRequest
0 голосов
/ 02 августа 2020

Я пытаюсь разработать простое приложение musi c. Я борюсь с методом случайного воспроизведения, поскольку текущая воспроизводимая песня дублируется, когда я нажимаю кнопку перемешивания. Есть ли способ предотвратить его дублирование? Я не планирую использовать более простые способы использования списков массивов и метода Collections.shuffle.

 private void prepareSongs()
{
    Song theWayYouLookTonight = new Song("S1001", "The Way You Look Tonight","Michael Buble","a5b8972e764025020625bbf9c1c2bbb06e394a60?cid=null",4.39,"michael_buble_collection");
    Song billieJean = new Song("S1002","Billie Jean","Michael Jackson","4eb779428d40d579f14d12a9daf98fc66c7d0be4?cid=null",5.45,"billie_jean");
    Song outinSpace = new Song("S1003","Out in Space","Whiz Khalifa","3d691281fae7d4ba8c5907887d2a31ce064891b3?cid=null",2.83,"wiz_khalifa");

    //This is my songs array
    songs[0] = theWayYouLookTonight;
    songs[1] = billieJean; 
    songs[2] = outinSpace;
}

//Shuffle method
 public Song getShuffleSong(String currentSongId)
{
    Song song = null;

    for(int i = 0; i < songs.length; i++)
    {
        if(songs[i].getId().equals(currentSongId))
        {
            //This part of the code is bugging me 
            song = songs[(int)(Math.random() * 3)]; 
            break;
        }
    }
    return song;
}

1 Ответ

1 голос
/ 02 августа 2020

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

public Song getShuffleSong(String currentSongId) {
    int rand = (int) (Math.random() * songs.length);
    while (songs[rand].getId().equals(currentSongId)) {
        rand = (int) (Math.random() * songs.length);
    }
    return songs[rand];
}

В качестве альтернативы вы можете сохранить все доступные индексы в List который регулярно обновляется, что потребует получения только одного случайного индекса из этого списка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...