Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    26

    [C#] Codice non funzionante

    Avverto che sono un niubbo in c#, e che quindi potrei fare affermazioni stupide ^^
    Questa porzione di codice fa parte del mio primo programma:

    private void button1_Click(object sender, EventArgs e)
    {
    int dim = 0;
    string c;
    char[] b = new char [dim];

    dim = textBox1.Text.Length;
    textBox1.Text.CopyTo(0, b, 0, textBox1.Text.Length);
    b[0] = (char)'a';
    for (int i = 0; i <= dim; i++)
    {
    c = c + b[i];
    }

    textBox1.Text = c;

    }


    Mi restituisce questo errore:

    "Utilizzo della variabile locale 'c' non assegnata"

    Qualcuno può spiegarmi perché?
    Ringrazio chiunque possa aiutarmi ^^

  2. #2
    codice:
    string c="";
    Se non inizializzi c non puoi usarla sul lato destro di un'assegnazione: il suo contenuto sarebbe indefinito.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    26
    Diamine hai ragione, grazie ^^

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    26
    Vado avanti con le domande da bravo niubbicino ^^

    In pratica io vorrei che il contenuto di textbox1.text venga salvato in un array di char.
    Come si può vedere sopra ho provato ad ottenere questo risultato con il metodo:

    textBox1.Text.CopyTo(0, b, 0, textBox1.Text.Length);

    Che però mi restituisce un errore tipo :

    "ArgoumentOutOfRange Exception non è stata gestita"

    Che errore ho fatto? Esiste un sistema più funzionale per ottenere lo stesso risultato?

  5. #5
    Motivo dell'errore:

    codice:
    int dim = 0; 
    string c;
    char[] b = new char [dim]; 
    
    dim = textBox1.Text.Length;
    L'ordine delle istruzioni è errato!

    codice:
    int dim = textBox1.Text.Length; 
    string c;
    char[] b = new char [dim];
    Domanda? Ma perchè dalla textBox1 devi passare ad un array di char che poi lo metti in una stringa che viene associata sempre alla stessa TextBox?

    Comunque...

    Ogni stringa ha un metodo guarda caso chiamato ToCharArray() che guarda caso restituisce proprio un char[]... Così non devi fare tu il for per ogni carattere da aggiungere alla stringa...

    Ciao!
    Cerco ombrello vecchio, nuovo, moderno o antidiluviano; purché protegga da una pioggia che vien giù come Dio la manda. Fate presto che ho l’acqua alla gola. (Noè)

    C# programming and other stuffs

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    26
    Grazie usando quel metodo ho combinato a risolvere ^^

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    26
    Dopo vane ricerche nella guida in linea e in forum vari devo di nuovo presentarmi a chiedere.

    Sono andato avanti nello sviluppo del programma, in pratica ora ogni volta che trova una particolare ricorrenza nell'array generato dalla stringa dovrebbe inserire alla fine di una stringa temporanea una sigla di tre lettere.

    Mi viene dato un errore di questo tipo:

    IndexOutOfRangeException

    Nella parte di codice evidenziato in rosso.

    codice:
            private void button1_Click(object sender, EventArgs e)
            {
                int dim = textBox1.Text.Length;
                int i = textBox1.Text.Length, a = (textBox1.Text.Length * 3);
                char[] seq = new char[i];
                string nseq = "";
    
    
                seq = textBox1.Text.ToCharArray();
                for(i=textBox1.Text.Length; i>=0; i--)
                {
                    if (seq[i] == 'k')
                    {
                        if (seq[i - 1] == 'a')
                        {
    
                            nseq = nseq.Insert(a, "AAG");
                            a = a - 3;
                        }
                    }
                }
    
    
                textBox1.Text = nseq;
                
            }

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    [QUOTE]Originariamente inviato da m3kka
    ...
    codice:
            private void button1_Click(object sender, EventArgs e)
            {
                int dim = textBox1.Text.Length;
                int i = textBox1.Text.Length, a = (textBox1.Text.Length * 3);
                char[] seq = new char[i];
                string nseq = "";
    
    
                seq = textBox1.Text.ToCharArray();
                for(i=textBox1.Text.Length - 1; i>=0; i--)
                {
                    if (seq[i] == 'k')
                    {
                        if (seq[i - 1] == 'a')
                        {
    
                            nseq = nseq.Insert(a, "AAG");
                            a = a - 3;
                        }
                    }
                }
    
    
                textBox1.Text = nseq;
                
            }
    [quote]

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    26
    Uhm... il problema rimane anche in seguito alla tua modifica.
    Altre idee?
    (Grazie cmq per l'aiuto)

  10. #10
    Allora, riepiloghiamo... Per una questione di performance ti consiglio l'uso dello StringBuilder, che non crea un nuovo oggetto stringa ogni volta che devi cambiare nseq. Comunque non cambia la logica dell'algoritmo quindi...

    codice:
            private void button1_Click(object sender, EventArgs e)
            {
                int dim = textBox1.Text.Length;
                int a = dim * 3;
                char[] seq = textBox1.Text.ToCharArray();
                StringBuilder nseq = new StringBuilder(); // identico a string nseq = "";
    
                for (int i = dim - 1; i >= 0; i--)
                {
                    if (seq[i] == 'k')
                    {
                        if (seq[i - 1] == 'a')
                        {
                            //Il problema è in questa istruzione sotto!!
                            nseq = nseq.Insert(a, "AAG");
                            a = a - 3;
                        }
                    }
                }
    
                textBox1.Text = nseq.ToString();
            }
    Come ti ho evidenziato, il problema sta in quella istruzione in rosso... in quanto la variabile a, inizializzata a a = (textBox1.Text.Length * 3); con una parola come ad esempio ciak ha un valore di 12... ma nella stringa nseq non esiste alcun carattere all'elemento 12 dell'array... quindi per forza da IndexOutOfBoundException!!

    Cosa devi fare esattamente quando hai trovato la sequenza dei due caratteri (k e a)??

    Ciao!!
    Cerco ombrello vecchio, nuovo, moderno o antidiluviano; purché protegga da una pioggia che vien giù come Dio la manda. Fate presto che ho l’acqua alla gola. (Noè)

    C# programming and other stuffs

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