2016-09-30 84 views
0

所以我一直在使用這種聲音數組保存4個獨特的話,到目前爲止,我已經successfuly隨機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); 
} 
} 

但我的下一個目標是打出來的話以隨機順序,但打每個字只有一次,因爲現在,它可以多次播放同一個詞。有關如何實現這一目標的任何建議?我知道如何用整數來完成,但我已經嘗試了幾個小時的聲音,但無濟於事。

+0

你想實現下一個單詞與當前單詞不相同,對嗎?或者你只想一次以一個字隨機地播放它們? – passion

+0

數組說「這是一個測試」,我的隨機數組到目前爲止可以說「This this a a」,或者「This is a a」,並且我希望它是唯一的,因爲在任何單詞中都不能重複兩次。所以......「這是一個測試」或「是一個測試」。 – TheDkmariolink

+0

有誰知道? – TheDkmariolink

回答

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 
    } 
+0

噢,如果我沒有指定足夠的內容,我很抱歉,但是它不是一個字符串數組,它是一個音頻數組,當您運行該程序時,它會在物理上說出「This is a test」。一個WAV文件。 – TheDkmariolink

+0

@TheDkmariolink 4數組中的音頻,一個'this'一個'is'...?這是一回事嗎? – passion

+0

不,它使用拼接點來確定要說出多少單詞。它不是一個字符串,它的Sound [] myWordArray。我發佈的代碼說出了單詞,但不是唯一的隨機數。 – TheDkmariolink

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); 
    } 
}