Java Android:寻找使用带有变量的switch的等价物
在我的应用程序中,我需要在按钮上播放声音,单击骰子滚动的声音更具体一些,但我不想播放与前一个相同的声音,因为掷骰子不会发出相同的声音 所以,我有4种不同的声音,如果可能的话,我想以相同的概率挑选其中一种尚未播放的声音 为此,我想使用以下方法:Java Android:寻找使用带有变量的switch的等价物,java,android,switch-statement,Java,Android,Switch Statement,在我的应用程序中,我需要在按钮上播放声音,单击骰子滚动的声音更具体一些,但我不想播放与前一个相同的声音,因为掷骰子不会发出相同的声音 所以,我有4种不同的声音,如果可能的话,我想以相同的概率挑选其中一种尚未播放的声音 为此,我想使用以下方法: MediaPlayer sound1, sound2, sound3, sound4; Random rnd; //Random and MediaPlayer are set up in the onCreate method public void
MediaPlayer sound1, sound2, sound3, sound4;
Random rnd;
//Random and MediaPlayer are set up in the onCreate method
public void playSound() {
int a, b, c, d, pos = 0, neg = 0;
if (sound1.isPlaying()) {neg++; a = neg;} else {pos++; a = pos;}
if (sound2.isPlaying()) {neg++; b = neg;} else {pos++; b = pos;}
if (sound3.isPlaying()) {neg++; c = neg;} else {pos++; c = pos;}
if (sound4.isPlaying()) {neg++; d = neg;} else {pos++; d = pos;}
//available MediaPlayer associated to 1, 2, 3 ...
//other MediaPlayer associated to -1, -2, -3 ...
if (pos>0){
switch (rnd.nextInt(pos) + 1) {
case a: sound1.start(); break;
case b: sound2.start(); break;
case c: sound3.start(); break;
case d: sound4.start(); break;
}
}
//pick a MediaPlayer among those associated to a positive number
}
但Android不允许将变量与大小写一起使用,所以我得到一个错误,说需要常量表达式
问题是:我如何通过使用android允许使用的东西来做到这一点
作为一个初学者,我没有找到任何答案,除了使用if,它列出了所有可能的情况
我对巨人并不感兴趣,因为我计划添加2或3个其他声音,可能的数量将达到2^6或2^7,即64或128
提前感谢您如果您允许将声音放置在一个数组中,那么当您想要添加更多声音时,您可以更轻松地完成所有这些操作 在纯Java中,此处使用8:
MediaPlayer sounds[] = {sound1, sound2, sound3, sound4};
Random rnd;
public void playSound() {
// Collect candidates - i.e. those that aren't playing right now.
List<MediaPlayer> candidates = Arrays.stream(sounds)
// Only not-playing ones.
.filter(s -> !s.isPlaying())
.collect(Collectors.toList());
// Pick a random one.
MediaPlayer picked = candidates.get(rnd.nextInt(candidates.size()));
// Play your sound.
}
候选人聚会的Java-7版本
// Collect candidates - i.e. those that aren't playing right now.
List<MediaPlayer> candidates = new ArrayList<>();
for ( int i = 0; i < sounds.length; i++) {
if ( !sounds[i].isPlaying() ) {
candidates.add(sounds[i]);
}
}
我在选择媒体播放器之前添加了if candidates.size>0以避免错误,谢谢您解决了我的问题