Náhodná věta, sub   otázka

VB.NET

Ahoj.

Mám ještě jednu otázku.

Jaký je kód pro náhodný výběr věty i sub?

Mě jde o to, aby v labelu chodili náhodné věty.

Ohledně sub... já tam mám připravený nějaké menší kódy a potřeboval bych, aby se to spustilo náhodně... mám 5 sub.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Asi jsem na to přišel

Public Class Form1
    Dim cislo As Integer

    Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
        cislo = Int(Rnd() * 10)

        Select Case cislo
            Case 0
                Label1.Text = "0 Lůkáš"
            Case 1
                Label1.Text = "1 David"
            Case 2
                Label1.Text = "2 Michal"
            Case 3
                Label1.Text = "3 Lucka"
            Case 4
                Label1.Text = "4 Eva"
            Case 5
                Label1.Text = "5 Milan"
            Case 6
                Label1.Text = "6 Anna"
            Case 7
                Label1.Text = "7 Pavel"
            Case 8
                msg1()
            Case 9
                msg2()
            Case 10
                msg3()

        End Select

    End Sub
    Public Sub msg1()
        MsgBox("8 Jana")
    End Sub

    Public Sub msg2()
        MsgBox("9 Karel")
    End Sub

    Public Sub msg3()
        MsgBox("10 Monika")
    End Sub
End Class

Není něco jiného? Jestli se to dá nějak odlehčit :)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Je to konzolová aplikace v C# , když tak si to přeložte na:

http://www.developerfusion.com/tools/con...

class Program
    {

        //List jmen
        private static List<string> _jmena;

        static void Main(string[] args)
        {
            //Inicializace listu jmen
            InicializeJmena();

            var id = GenerateRandomKey();
            var name = _jmena[id];

            Console.WriteLine("{0} {1}", id, name);
            Console.ReadKey();

            id = GenerateRandomKey();
            name = _jmena[id];

            Console.WriteLine("{0} {1}", id, name);
            Console.ReadKey();
        }

        /// <summary>
        /// Inicializuje slovník jmen
        /// Lze načítat jména z databáze, z Xml nebo Txt souboru ....
        /// </summary>
        private static void InicializeJmena()
        {
            
            _jmena = new List<string>
                {
                    "Lukáš",
                    "David",
                    "Michal",
                    "Lucka",
                    "Eva",
                    "Milan",
                    "Anna",
                    "Pavel",
                    "Jana",
                    "Karel",
                    "Monika"
                };

        }

        /// <summary>
        /// Generuje náhodné Id
        /// </summary>
        /// <returns>Id v rozsahu slovníku</returns>
        private static int GenerateRandomKey()
        {
            var rnd = new Random();
            return rnd.Next(0, _jmena.Count - 1);
        }
    }
nahlásit spamnahlásit spam 0 odpovědětodpovědět

Lepší by bylo, kdyby to někdo napsal ručne do VB.NET protože z toho překladače je to takový divný.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Trochu jsem to zobjektoval, principiálně je to však stejné

Třída generátoru jmen (děděná z listu)

Public Class NameGenerator
    Inherits List(Of String)

    Private ReadOnly _rnd As Random

    Public Sub New()
        _rnd = New Random()
    End Sub

    Private _id As Integer
    ''' <summary>
    ''' Id jména
    ''' </summary>
    Public ReadOnly Property Id As Integer
        Get
            Return _id
        End Get
    End Property

    Private _name As String
    ''' <summary>
    '''Jméno.
    ''' </summary>
    Public ReadOnly Property Name As String
        Get
            Return _name
        End Get
    End Property

    Private _isGenerated As Boolean
    ''' <summary>
    ''' Příznak, že jméno bylo vygenerováno
    ''' </summary>
    Public ReadOnly Property IsGenerated As Boolean
        Get
            Return _isGenerated
        End Get
    End Property
    
    ''' <summary>
    ''' Generuje náhodnou položku z listu
    ''' </summary>
    ''' <exception cref="System.ArgumentException">Není vloženo žádné jméno</exception>
    Public Sub GenerateName()

        If (Count = 0) Then Throw New ArgumentException("Není vloženo žádné jméno")

        _id = _rnd.Next(0, Count - 1)
        _name = Me(Id)
        _isGenerated = True

    End Sub

End Class

Naplnění a použití:

Public Class Form1

    Private ReadOnly _jmena As New NameGenerator()

    Public Sub New()

        ' This call is required by the designer.
        InitializeComponent()

        ' Add any initialization after the InitializeComponent() call.

        'Inicializace jmen
        InicializaceJmen()
    End Sub

    ''' <summary>
    ''' Inicializace seznamu jmen
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub InicializaceJmen()

        _jmena.AddRange( _
            {"Lukáš", _
             "David", _
             "Michal", _
             "Lucka", _
             "Eva", _
             "Milan", _
             "Anna", _
             "Pavel", _
             "Jana", _
             "Karel", _
             "Monika"})
    End Sub


    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        'generování jména
        _jmena.GenerateName()

        'vypsání do labelu
        Label1.Text = String.Format("{0} {1}", _jmena.Id, _jmena.Name)
    End Sub

End Class
nahlásit spamnahlásit spam 0 odpovědětodpovědět

No vyzkouším to až večer, ale děkuji :)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Načtení jmen (InicializaceJmen), by ještě bylo lepší přesunout do třídy NameGenerator.

A spouštět ji při inicializaci nebo na nějakou funkci Load.

Přetížením metody Load bych pak docílil načítání z různých zdrojů. Což by práci s touto třídou ještě více zjednodušilo.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback