如何以随机唯一顺序播放声音数组

时间:2016-09-30 02:16:57

标签: java arrays audio

所以我一直在使用这个包含4个独特单词的声音数组,到目前为止,我已经成功地随机化了4个单词。

public void playRandomOrder(int totalWords, int pause) throws InterruptedException {
    Random random = new Random(); // Random number generator for array shuffle
    for (int i =0; i< numWords; i++) {
        int randomPosition = random.nextInt(totalWords); // how many words to sound out (4)
        Sound temp = myWordArray[i];
        myWordArray[i] = myWordArray[randomPosition];
        myWordArray[randomPosition] = temp;
        myWordArray[i].blockingPlay();
        Thread.sleep(pause); 
}
}

但我的下一个目标是以随机顺序播放单词,但只播放一次单词,因为现在,它可以多次播放同一个单词。有关如何实现这一目标的任何建议?我知道怎么用整数来做,但是我已经在声音上试了好几​​个小时但没有用。

2 个答案:

答案 0 :(得分:0)

您可以使用比较器来实现比较,并使用随机比较结果。

    final Random rand = new Random();
    List<Sound> list = Arrays.asList(myWordArray);
    Collections.sort(list, new Comparator<Sound>() {

    @Override
    public int compare(Sound o1, Sound o2) {
        return rand.nextInt() % 2 == 0 ? 1 : -1;
    }
    });

    list.toArray(myWordArray);
    for(Sound sound : myWordArray){
         sound.blockingPlay();
         Thread.sleep(1000); // 1000 as the pause
    }

答案 1 :(得分:0)

先将数组洗牌。这里是代码:

public void playRandomOrder(int totalWords, int pause) throws InterruptedException {
    Collections.shuffle(myWordArray);
    for (int i =0; i< numWords; i++) {
        myWordArray[i].blockingPlay();
        Thread.sleep(pause); 
    }
}