到目前为止,这段代码听起来像是"这是一个测试"以随机顺序,但这些词可以重复多次。 myWordArray是一个在程序中设置的静态声音数组,它从特定声音中读取拼接点。
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); // 320 m.seconds, as listed in main method parameter
}
}
我希望它是这样的,这些单词可以随机播放,但没有一个单词重复。例如&#34;这个测试是&#34;而不是&#34;这是测试&#34;以下是我迄今为止的独特随机词......
public void playRandomUnique(int pause) throws InterruptedException {
final Random random = new Random();
List<Sound> list = Arrays.asList(myWordArray);
Collections.sort(list, new Comparator<Sound>(){
@Override
public int compare(Sound o1, Sound o2){
return random.nextInt() % 2 == 0 ? 1 : -1;
}
});
list.toArray(myWordArray);
for (Sound sound: myWordArray)
sound.blockingPlay();
Thread.sleep(pause);
}
然而,这导致了线程&#34; main&#34;中的&#34;异常。 java.lang.IllegalArgumentException:比较方法违反了它的一般合同!&#34;当我在main中运行它时没有声音播出。