Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [C# e WPF] Random e stringhe

    Ciao a chiunque leggerà questo post

    Innanzi tutto volevo puntualizzare che più che il codice pronto, mi interessava capire il mio errore e discuterne con voi.

    Vi spiego cosa devo realizzare. Devo creare un programma che permetta all'utente di poter digitare qualsiasi cosa in un TextBox, e in un TextBlock compaia ciò che lui ha scritto ma con i caratteri messe a caso.

    Ora il TextBox si chiama: sorgente, ed il TextBlock si chiama: Casualizza .

    Il codice che ho riportato di seguito non da nessun errore, solo che al debug quando tento di scrivere qualcosa all'interno del TextBox, mi si blocca con l'errore nella linea:

    codice:
    int r_1 = Convert.ToInt16(rnd_1);
    Con la seguente scritta: Impossibile eseguire il cast di oggetti di tipo 'System.Random' sul tipo 'System.IConvertible'.

    Ho provato a cercare su internet, ma mi pare che la conversione tra random e int è stata fatta correttamente, e mi sembra anche che il ragionamento che ho fatto per invertire i caratteri è giusto.

    Potete spiegarmi dov'è l'errore?

    ---Ecco il Codice---

    codice:
    Casualizza.Text = "";
                Random rnd_1 = new Random();
                char[] csl_1 = new char[sorgente.Text.Length];
                for (int i = 0; i < sorgente.Text.Length; i++)
                {
                    int r_1 = Convert.ToInt32(rnd_1);
                    int r_2 = (int) r_1;
                    if (r_1 >= 0 && r_1 < 36)
                    {
                        Casualizza.Text = Convert.ToString(sorgente.Text[r_2]);
                    }
                    else
                    {
                        Random rnd_2 = new Random();
                        for (int t = 0; t < 1; )
                        {
                            int r_3 = Convert.ToInt16(rnd_1);
                            int r_4 = (int)r_1;
                            if (r_1 >= 0 && r_1 < 36)
                            {
                                Casualizza.Text = Convert.ToString(sorgente.Text[r_4]);
                                t++;
                            }
                            else
                            {
                                t = t;
                            }
                        }
                    }
                }

  2. #2
    Utente di HTML.it L'avatar di albgen
    Registrato dal
    Jun 2005
    Messaggi
    3,249
    ma perchè utilizzi toint16 e poi toint32?
    I got the remedy

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Ma scusa come fai a convertire un'oggetto Random in un'intero????


    Piuttosto:
    codice:
    int r_1 = Convert.ToInt16( rnd_1.NextDouble);
    Ma anche così non otterrai nessun valore, non puoi convertire un numero random da 0 a 1 in un'intero!

    Piuttosto:
    codice:
    Double r_1 = rnd_1.NextDouble;
    Sbagliare è umano, perseverare è diabolico.

  4. #4
    Originariamente inviato da albgen
    ma perchè utilizzi toint16 e poi toint32?
    Ah quello è un errore che ho messo per sbaglio quando l'ho scritto sul forum, erano tutti toint16.

    Originariamente inviato da Pirelli72
    Ma scusa come fai a convertire un'oggetto Random in un'intero????


    Piuttosto:
    codice:
    int r_1 = Convert.ToInt16( rnd_1.NextDouble);
    Ma anche così non otterrai nessun valore, non puoi convertire un numero random da 0 a 1 in un'intero!

    Piuttosto:
    codice:
    Double r_1 = rnd_1.NextDouble;
    Ah bèh, vuoi dire che generando un numero random, può uscire anche un numero con la virgola giusto?

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Dipende dalla funzione che usi, se utilizzi:

    codice:
    rnd.NextDouble;
    avrai un numero con la virgola da 0 a 1.

    Se utilizzi

    codice:
     Random rnd = new Random();
     Byte[] myByte = new Byte[10];
      rnd.NextBytes(myByte );
    avrai una matrice di byte (da 0 a 255)

    Se utilizzi

    codice:
     rnd.Next(0, 100);
    avrai un'intero da 0 a 100

    Vedi tu.

    E comunque:
    Random
    Sbagliare è umano, perseverare è diabolico.

  6. #6
    si, infatti mentre aspettavo una risposta qui, ho letto in giro questa cosa.

    Ma allora non riesco a spiegarmi perchè questo codice non funziona:

    codice:
    Casualizza.Text = "";
                Random rnd_1 = new Random();
                char[] csl_1 = new char[sorgente.Text.Length];
                for (int i = 0; i < sorgente.Text.Length; i++)
                {
                    int r_1 = Convert.ToInt16(rnd_1);
                    int r_2 = (int) r_1;
                    if (r_1 >= 0 && r_1 < 36)
                    {
                        Casualizza.Text = Convert.ToString(sorgente.Text[r_2]);
                    }
                    else
                    {
                        Random rnd_2 = new Random();
                        for (int t = 0; t < 1; )
                        {
                            int r_3 = Convert.ToInt16(rnd_1);
                            int r_4 = (int)r_1;
                            if (r_1 >= 0 && r_1 < 36)
                            {
                                Casualizza.Text = Convert.ToString(sorgente.Text[r_4]);
                                t++;
                            }
                            else
                            {
                                t = t;
                            }
                        }
                    }
                }
    Non riesco a spiegarmelo

    Perchè se metto int r_1 = rnd_1;
    Mi da il seguente errore: Errore 1 Impossibile convertire implicitamente il tipo 'System.Random' in 'int'

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Ancora????


    Ma scusa leggi quello che ti viene scritto?

    Non puoi convertire un'oggetto System.random in un'intero!!!!!!!
    Questo frammento di codice non è corretto.
    codice:
    Random rnd_1 = new Random();
    int r_1 = Convert.ToInt16(rnd_1);

    Il codice corretto è:

    codice:
    Random rnd_1 = new Random();
    int r_1 = Convert.ToInt16(rnd_1.Next(0,100));
    Come fai ad assegnare ad una varialbile di tipo intero un'oggetto System.Random??

    codice:
    int r_1 = rnd_1;
    r_1 è un'intero
    rnd_1 è un oggetto System.Random

    Per cui cui al limite:

    codice:
    int r_1 = rnd_1.Next(0,100);
    Sbagliare è umano, perseverare è diabolico.

  8. #8
    ...ora ho capito xD

    Avevo letto, ma non riuscivo a capire il perchè =P

    Infatti rileggendo il codice non avevo detto al Random tra quali numeri fare la casualità

    Grazie mille per l'aiuto ragazzi

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Sbagliare è umano, perseverare è diabolico.

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 © 2026 vBulletin Solutions, Inc. All rights reserved.