Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di Veronica80
    Registrato dal
    May 2006
    Messaggi
    2,110

    [VB.NET] - System.Random funziona davvero?

    Ciao a tutti!
    Ho la necessità di creare dei numeri random che siano davvero compresi tra 2 numeri di intervallo.
    Sto usando Random di .NET in questo modo:

    codice:
     Dim i As Integer = 0
            Do Until i = 2
                Dim rand As New System.Random
                Dim index As Integer = rand.Next(0, 2)
                i = index
                Console.WriteLine(index)
            Loop
    il loop va in crash dopo circa 1,5 milioni di cicli dove il numero max (2) non esce MAI....

    Questo accade sempre...

    la domanda a sto punto è: ma il numero max è compreso o no nell'intervallo?
    Perchè in alcuni scenari del mio software il fatto che non lo sia rischia davvero di mandare in loop infinito l'applicazione!

    Grazie

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,476
    Perché non si legge mai la documentazione?

    "A 32-bit signed integer that is greater than or equal to 0 and less than Int32.MaxValue."
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2014
    residenza
    Vicenza
    Messaggi
    310
    Ovviamente come al solito Oregon ha ragione, non hai guardato bene la documentazione, infatti il secondo parametro della funzione è escluso dall'estrazione dei numeri casuali.
    Dovresti quindi usare
    codice:
    Dim index As Integer = rand.Next(0, 3)
    Inoltre, se posso darti un consiglio, la linea
    codice:
    Dim rand As New System.Random
    mettila fuori dal ciclo.

    L'inizializzazione di "rand" dovresti farla all'inizio della tua app (quindi una volta sola), e usare rand.next

  4. #4
    Utente di HTML.it L'avatar di Veronica80
    Registrato dal
    May 2006
    Messaggi
    2,110
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Perché non si legge mai la documentazione?

    "A 32-bit signed integer that is greater than or equal to 0 and less than Int32.MaxValue."
    Io la documentazione l'ho letta qui:

    https://learn.microsoft.com/en-us/do...m?view=net-7.0

    ma che il valore max non fosse compreso non mi pare ci sia scritto (o forse mi sfugge non essendo inglese!).


    ad ogni modo grazie per la conferma!

  5. #5
    Utente di HTML.it L'avatar di cassano
    Registrato dal
    Aug 2004
    Messaggi
    3,000
    Dalla documentazione:

    The following example calls the Next(Int32, Int32) method to generate 10 random numbers between -10 and 10. Note that the second argument to the method specifies the exclusive upper bound of the range of random values returned by the method. In other words, the largest integer that the method can return is one less than this value.

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,476
    Quote Originariamente inviata da Veronica80 Visualizza il messaggio
    Io la documentazione l'ho letta qui:

    https://learn.microsoft.com/en-us/do...m?view=net-7.0

    ma che il valore max non fosse compreso non mi pare ci sia scritto (o forse mi sfugge non essendo inglese!).
    C'è scritto...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.