1

以下のコードは、メソッドやループを壊すことはありませんが、代わりに音楽を永久にループします。OnCompletionListener(n==maxCount)の値を変更して出力する必要がある場合n=1、つまり音楽の再生を停止する必要がある場合、これが私が望むものです。

どうすればこれを修正できますか?

    protected void playsound() {
    mp.setOnCompletionListener(new OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mp) {
            if (n<=maxCount) {
                mp.start();
                n++;
                if(n==maxCount){
                    n=1;
                    return;
                }
            }
        }
    });
    mp.start();

maxCount値はスピナー値に依存し、n=1グローバルに宣言されます。

以下は完全に機能する修正されたコードですが、以下のコードに間違いはありますか?一部のユーザーは、「このコードでは、終了条件を見逃す危険性があります。入力時にn == maxCountの場合、n++の後にn>maxCountになるためです。つまり、maxintに到達するまで実行されます。その後、クラッシュします」?

protected void playsound() {
    // TODO Auto-generated method stub
    mp.setOnCompletionListener(new OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mp) {
            if (n<=maxCount) {
                mp.start();
                n++;
                if(n==maxCount){
                    n=1;
                    mp.pause();
                    mp.seekTo(0);

                }
            }
        }
    });
    mp.start();
}
4

3 に答える 3

1

編集:

代わりmp.start();に使用する必要があるので音楽を止めることはできませんmp.stop()


あなたはチェックしています if (n<maxCount) {

そして、あなたがチェックしている同じ条件の中でn==maxCount、どのように世界の値がその数に等しい数よりも小さいか、つまりn==maxCount決して満たされないので、このように条件を変更する必要があります

if(n<=maxCount)

以下のコードは、メソッドやループを壊すことはありませんが、代わりに音楽を永久にループします

はい。returnステートメントはn==maxCountを満たさないためです。

于 2013-03-25T18:08:13.423 に答える
1

問題は、どこで実行するかですmp.start()。次のように他の場所に移動します。

if (n<maxCount) {
    n++;
    if(n==maxCount){
        // Don't play the sound anymore.
        n=1;
        return;
    } else {
        // Continue playing the sound.
        mp.start();
    }
}

問題は、をチェックすることですがif(n==maxCount)、どちらの方法でもサウンドを再生してから、nを1にリセットして、再生を継続します。

于 2013-03-25T18:16:57.537 に答える
1

mp.start()インナーの後に置く必要があると思います。毎回音楽を開始するので、常にに戻りonCompletion、maxCountを再生した後でも、設定しているため、音楽を再開できます。n=1;

    public void onCompletion(MediaPlayer mp) {
        if (n < maxCount) {
            n++;
            if(n == maxCount){
                n = 1;
                return;
            }
            mp.start();
        }
    }
于 2013-03-25T18:18:00.367 に答える