2017-08-25 42 views
0

在我的应用程序中,我需要播放声音上的按钮单击(骰子滚动声音更具体),但我不想播放与以前相同的声音因为扔骰子从来没有发出相同的声音。Android:寻找相当于使用开关变量

所以,我有4种不同的声音,我想如果可能的话来接,以相同的概率,这是不是已经打他们中的一个

要做到这一点,我想用这个:

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允许使用做?

作为一个初学者,我没有找到任何答案,除了使用“如果”这是列出所有可能的情况下

(我不是一个巨大的“如果”很感兴趣,因为我计划增加2或其他3声音的可能性数量将达到2^6或2^7,意为64或128)

预先感谢您

回答

1

如果你让你的声音,以被放置在阵列中(更当你想添加更多的时候更好的方法),你可以更容易地做到这一切。

在纯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]); 
     } 
    } 
+1

我增加“如果(candidates.size()> 0) “在选择媒体播放器以避免错误之前,你解决了我的问题 – Ericu