Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android:寻找使用带有变量的switch的等价物_Java_Android_Switch Statement - Fatal编程技术网

Java Android:寻找使用带有变量的switch的等价物

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

在我的应用程序中,我需要在按钮上播放声音,单击骰子滚动的声音更具体一些,但我不想播放与前一个相同的声音,因为掷骰子不会发出相同的声音

所以,我有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允许使用的东西来做到这一点

作为一个初学者,我没有找到任何答案,除了使用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以避免错误,谢谢您解决了我的问题