Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1
    Utente di HTML.it L'avatar di dwb
    Registrato dal
    Mar 2001
    residenza
    My IDE! :)
    Messaggi
    2,908

    Problema con istruzione Switch

    Ho questo codice:

    codice:
    using System;
    
    namespace Wrox.Prova.LogicaCondizionale
    {
        class SwitchNum
        {
    
            public static void Main()
            {
                int prova = 1;
                switch(prova)
                {
                    case 1 :
                        Console.WriteLine("Il numero presente è 3");
                        break;
                    case 2:
                        Console.WriteLine("Il numero presente è 2");
                        break;
                    case 3:
                        Console.WriteLine("Il numero presente è 3");
                        break;
                    default:
                        Console.WriteLine("Il numero presente non è compreso nell'intervallo");
                        break;
                }
            }
        }
        
    }
    In output mi dice sempre:

    Il numero presente è 3

    anche se la variabile prova contiene il valore 1!!!Dove sbaglio?

    Poi, una spiegazione: sul libro che sto usando per studiare, c'è scritto:

    "Attenzione, i valodi delle clausole case devono essere costanti, le variabili non sono ammesse"

    Qualcuno mi spiegherebbe meglio cosa intende?Non ho ben capito!
    ~Il nome di una variabile deve riflettere il suo scopo e non il suo tipo di dati, NET Framework.

  2. #2
    Utente di HTML.it L'avatar di hkproj
    Registrato dal
    Jul 2006
    Messaggi
    250
    ti dice qualcosa?
    case 1 :
    Console.WriteLine("Il numero presente è 3");
    hai scritto due volte "il numero presente è 3"
    errore?
    ciao
    --------------------HkProj------------------

  3. #3
    Utente di HTML.it L'avatar di dwb
    Registrato dal
    Mar 2001
    residenza
    My IDE! :)
    Messaggi
    2,908
    Modificato, in questo modo:

    codice:
    using System;
    
    namespace Wrox.Prova.LogicaCondizionale
    {
        class SwitchNum
        {
    
            public static void Main()
            {
                int x = 1;
                switch(x)
                {
                    case 1 :
                        Console.WriteLine("Il numero presente è 4");
                        break;
                    case 2:
                        Console.WriteLine("Il numero presente è 2");
                        break;
                    case 3:
                        Console.WriteLine("Il numero presente è 3");
                        break;
                    default:
                        Console.WriteLine("Il numero presente non è compreso nell'intervallo");
                        break;
                }
            }
        }
        
    }
    Mi dice sempre, "Il numero presente è 4"!!!Comemai non va ?????
    ~Il nome di una variabile deve riflettere il suo scopo e non il suo tipo di dati, NET Framework.

  4. #4
    Utente di HTML.it L'avatar di hkproj
    Registrato dal
    Jul 2006
    Messaggi
    250
    ancora lo stesso errore!
    case 1 :
    Console.WriteLine("Il numero presente è 4");
    al posto di "il numero presente è 4" devi mettere "il numero presente è 1"
    il codice ora dovrebbe essere così:
    using System;

    namespace Wrox.Prova.LogicaCondizionale
    {
    class SwitchNum
    {

    public static void Main()
    {
    int x = 1;
    switch(x)
    {
    case 1 :
    Console.WriteLine("Il numero presente è 1");
    break;
    case 2:
    Console.WriteLine("Il numero presente è 2");
    break;
    case 3:
    Console.WriteLine("Il numero presente è 3");
    break;
    default:
    Console.WriteLine("Il numero presente non è compreso nell'intervallo");
    break;
    }
    }
    }

    }
    --------------------HkProj------------------

  5. #5
    Utente di HTML.it L'avatar di dwb
    Registrato dal
    Mar 2001
    residenza
    My IDE! :)
    Messaggi
    2,908
    Scusami, e intanto grazie, ma non mi dovrebbe venire fuori il messaggio presente nella riga:

    codice:
    Console.WriteLine("Il numero presente non è compreso nell'intervallo");
    dato che nessuno dei numeri presenti nei blocchi case corrisponde a quello contenuto nella variabile?
    ~Il nome di una variabile deve riflettere il suo scopo e non il suo tipo di dati, NET Framework.

  6. #6
    Utente di HTML.it L'avatar di hkproj
    Registrato dal
    Jul 2006
    Messaggi
    250
    spiegati meglio, cosa fai tu e cosa ti viene fuori?
    sinceramente io non conosco il c# ma il tuo codice è piu che comprensibile.
    --------------------HkProj------------------

  7. #7
    Utente di HTML.it L'avatar di dwb
    Registrato dal
    Mar 2001
    residenza
    My IDE! :)
    Messaggi
    2,908
    Allora, nella variabile x c'è un valore, nel mio caso, 1, ora, con l'istruzione switch verifico il valore contenuto nella variabile e, in base a ciò che contiene stampo a video il relativo messaggio, ma ciò non funziona, dato che mi stampa a video sempre e solo il primo valore della clausola case. Aspettiamo qualcuno che ne sappia più di noi!

    alka?????
    ~Il nome di una variabile deve riflettere il suo scopo e non il suo tipo di dati, NET Framework.

  8. #8
    Utente di HTML.it L'avatar di hkproj
    Registrato dal
    Jul 2006
    Messaggi
    250
    questa inizializzazione ti suggerisce qualcosa?
    int x = 1;
    è ovio che se non assegni un valore diverso alla variabile il risultato sarà sempre lo stesso...
    e cmq la tua funziona non accetta alcun parametro e ciò vuoldire che l risulltato sarà sempre quello della variabile x
    --------------------HkProj------------------

  9. #9
    Utente di HTML.it L'avatar di dwb
    Registrato dal
    Mar 2001
    residenza
    My IDE! :)
    Messaggi
    2,908
    Uppete
    ~Il nome di una variabile deve riflettere il suo scopo e non il suo tipo di dati, NET Framework.

  10. #10
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480
    Originariamente inviato da dwb
    Allora, nella variabile x c'è un valore, nel mio caso, 1, ora, con l'istruzione switch verifico il valore contenuto nella variabile e, in base a ciò che contiene stampo a video il relativo messaggio, ma ciò non funziona, dato che mi stampa a video sempre e solo il primo valore della clausola case. Aspettiamo qualcuno che ne sappia più di noi!
    Guarda che ti è già stata data la risposta corretta.

    Se tu assegni il valore 1 alla variabile e la usi in un costrutto switch, il "ramo" dell'istruzione che verrà eseguito sarà quello associato al valore 1 che la tua variabile ha assunto.

    Poi, se in quel ramo tu invii in output un messaggio che dice che, in realtà, il valore è 3, il problema è nel messaggio di testo, non nella logica di programmazione.

    Hai compreso come funziona il costrutto switch?

    P.S.: il linguaggio di programmazione... lo dimentichi sempre...
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

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.