Çözüldü Random komutunun aynı şeyi seçmesini istemiyorum

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

Asyuid

Centipat
Katılım
18 Aralık 2022
Mesajlar
13
Daha fazla  
Cinsiyet
Erkek
Windows forms uygulaması C# .Net Bir Media Player buldum internet üzerinden. Eklediğim şey ise random komutu, ama bu komutun listeden seçtiğini bir daha seçmesini istemiyorum.
Yeni başladım bu tür şeylere yardımcı olabilirseniz iyi olur... :)

Kod:
Private Void playlistchanged(object sender, eventargs e)
 {
 Currentfile = playlist. Selectedındex;
 PlayFile(PlayList.SelectedItem.ToString());
 Showfilename(filename);
 Random rnd = New Random();
 İnt sayi = rnd. Next(1, playlist. Items. Count);
 Playlist. Selectedındex = sayi;

 }
 
Son düzenleyen: Moderatör:
Çözüm
Peki bunu gönderdiğim kod üzerinden anlatabilir misiniz?
C#:
private List<int> selectedIndices = new List<int>();
private Random rnd = new Random();

private void PlaylistChanged(object sender, EventArgs e)
{
    int selectedIndex = playlist.SelectedIndex;

    if (!selectedIndices.Contains(selectedIndex))
    {
        selectedIndices.Add(selectedIndex);
        Currentfile = selectedIndex;
        PlayFile(playlist.SelectedItem.ToString());
        ShowFileName(filename);

        if (selectedIndices.Count == playlist.Items.Count)
        {
            selectedIndices.Clear();
        }
        else
        {
            int randomNumber;
            do
            {
                randomNumber = rnd.Next(playlist.Items.Count);
            }
            while (selectedIndices.Contains(randomNumber));

            playlist.SelectedIndex = randomNumber;
        }
    }
}
Şeklinde yazarsanız olacaktır.
C#:
private Random rnd = new Random();
private int previousRandomIndex = -1;

private void PlaylistChanged(object sender, EventArgs e)
{
    int selectedIndex = playlist.SelectedIndex;

    if (selectedIndex != previousRandomIndex)
    {
        Currentfile = selectedIndex;
        PlayFile(playlist.SelectedItem.ToString());
        ShowFileName(filename);

        int randomNumber;
        do
        {
            randomNumber = rnd.Next(playlist.Items.Count);
        }
        while (randomNumber == previousRandomIndex);

        previousRandomIndex = randomNumber;
        playlist.SelectedIndex = randomNumber;
    }
}
 
Şeklinde yazarsanız olacaktır.
C#:
private Random rnd = new Random();
private int previousRandomIndex = -1;

private void PlaylistChanged(object sender, EventArgs e)
{
    int selectedIndex = playlist.SelectedIndex;

    if (selectedIndex != previousRandomIndex)
    {
        Currentfile = selectedIndex;
        PlayFile(playlist.SelectedItem.ToString());
        ShowFileName(filename);

        int randomNumber;
        do
        {
            randomNumber = rnd.Next(playlist.Items.Count);
        }
        while (randomNumber == previousRandomIndex);

        previousRandomIndex = randomNumber;
        playlist.SelectedIndex = randomNumber;
    }
}

Bu şekilde sadece ard arda aynı şeyin seçilmesi önlenir. O da 1 kez. 1-3-1-4-1-6-1-2 gibi bir sonuç bile verebilir.

Seçilen şeyleri seçtiğiniz listeden düşünüz.

Veya rasgele sırada bir liste oluşturup o listeyi dönünüz.
 
Peki bunu gönderdiğim kod üzerinden anlatabilir misiniz?
C#:
private List<int> selectedIndices = new List<int>();
private Random rnd = new Random();

private void PlaylistChanged(object sender, EventArgs e)
{
    int selectedIndex = playlist.SelectedIndex;

    if (!selectedIndices.Contains(selectedIndex))
    {
        selectedIndices.Add(selectedIndex);
        Currentfile = selectedIndex;
        PlayFile(playlist.SelectedItem.ToString());
        ShowFileName(filename);

        if (selectedIndices.Count == playlist.Items.Count)
        {
            selectedIndices.Clear();
        }
        else
        {
            int randomNumber;
            do
            {
                randomNumber = rnd.Next(playlist.Items.Count);
            }
            while (selectedIndices.Contains(randomNumber));

            playlist.SelectedIndex = randomNumber;
        }
    }
}
 
Çözüm

Technopat Haberler

Yeni konular

Geri
Yukarı