音楽プレーヤーでランダムに再生される2つのモードについて


周知のように、完全な機能を持つ音楽プレーヤーは、シングルサイクル、ランダム再生、リストサイクル、すべて再生など、ユーザーが自主的に再生モードを選択できるはずです.本論文では,ランダム再生を実現する機能にはrandomアルゴリズムとshuffleアルゴリズムの2つの方法があることを主に論じた.両者にそれぞれメリットとデメリットがあるので、筆者は自分の短い認識でこの2つのアルゴリズムについて話してみました:(いずれもJAVAコードです)
一.randomアルゴリズムによるランダム再生
randomによるランダム再生の利点は、次の曲が再生されるまで誰も何が再生されるか分からず、完全にランダムな目的を達成することであるが、その欠点も明らかになる.前の曲と次の曲には実際には何の違いもない.すべて完全にランダムです(前の曲が違うようにするには、歴史記録を実現しなければなりません.これは複雑ですが、一般的なランダム再生は前の曲と次の曲と同じようにランダムです.前の曲の記憶機能を実現するには以下に説明します)これは前の曲というボタンの機能を消すことに相当しますが、この小さな犠牲は完全に耐えられます.一般的に多くのプレーヤーのランダム再生はrandomアルゴリズムを採用しており、一定の原因があると信じています.
くだらないことは言わないで、コードをつけます:
Calendar ca = Calendar.getInstance();//              
int i;
Random rand =new Random(ca.get(Calendar.MINUTE)*ca.get(Calendar.SECOND));//                  * ,       ,     ,      
i=rand.nextInt(maxnum);//maxnum           
    		
このコードは大体の1つの考え方、1つの方法を貼って、もし使うならば構想を参考にすることができて、またあなた自身の要求によって自分で変更しなければなりません.
二.shuffleアルゴリズムによるランダム再生
shuffleアルゴリズムによるランダム再生はrandomに比べて最大の利点があり、前の曲のボタンの機能を体現し、記憶再生を実現することができ、shuffleアルゴリズムに触れたばかりの人にとっては一時的に理解しにくいが、このアルゴリズムはいったい何をしているのだろうか.簡単な例を言って見積もるとわかります.いくつかの数字をあげて、見積もると、泡の並べ替え、挿入の並べ替え、迅速な並べ替えなど、多くのアルゴリズムを考えることができます.いろいろなアルゴリズムが要求に達すると、次は簡単になります.それはshuffleアルゴリズムが秩序ある数字を無秩序にすることです.順序付けの逆アルゴリズムです.一つは雑然とした秩序を変えることです.もう一つは秩序を雑然とした秩序を乱すことです.これでよく理解しましょう.破壊することです.秩序を無秩序にすることです.しかし、それはまだ特定のシーケンスです.はい、シーケンスです.シーケンスである以上、必然的な法則があり、一定の位置があるに違いありません.では、前の曲の実現は容易ではありませんが、境界を越えた問題(つまり、最初の要素の前、最後の要素の後のこのような状況)を考慮しなければなりません.最後にshuffleアルゴリズムの欠点を話しましょう.それはrandomアルゴリズムに比べて彼が計算できないのは完全にランダムです.その雑然としたシーケンスが確定すると変えられないので、残りはシナリオで芝居をして、順番に仕事をします.このアルゴリズムは多くのプログラミング言語で開発者に既成の使い方を提供しているので、一般的には自分で書き直す必要はありませんが、自分の要求を満たすことができなければ、自分で書かなければなりません.このアルゴリズムに触れたばかりの人は自分で書くことをお勧めします.このアルゴリズムに対する理解を深めることができます.次は自分で書くことを提供します.また、生成されるたびに無秩序なシーケンスが同じであることを避けるには、このようなアルゴリズムは良いアルゴリズムではなく、少なくとも音楽プレーヤーにとって.
public void shuffle(int a)
{
int tm[] = new int[a];
int temp,first,next;
for(int i = 0;i
{
tm[i]=i;
}
for(int i = 0;i
{
Calendar ca = Calendar.getInstance();
Random rand =new Random(i+ca.get(Calendar.MINUTE)*ca.get(Calendar.SECOND));
Random rand1 =new Random(rand.nextInt(songnum)); 
first=rand1.nextInt(tm.length); 
temp = tm[i]; 
next=tm[first];  
tm[i]=next;  
tm[first]=temp;
}
}
本人のレベルが限られているので、間違ったことを言っているところがあれば斧正してください.