277 messaggi dal 20 maggio 2001
Salve ragazzi, avrei la necessità di stampare a video un saluto in base all'orario della visita, e a tal proposito ho scritto questo codice:

   protected void Page_Load(object sender, EventArgs e)
        {
            int orario = DateTime.Now.Hour;
            if(orario >= 12 && orario <20)
            {
                msg.Text = "Buonasera";
            }
            if(orario >= 21 && orario <=6)
            {
                msg.Text = "Buonanotte";
            }
            if(orario >= 6 && orario <=12)
            {
                msg.Text = "Buongiorno";
            }
            
            Response.Write(DateTime.Now.Hour);
        }

Le mie intenzioni sono:
1. Buonasera dalle 12 alle 20;
2. Buongiorno dalle 6 alle 12;
3. Buonanotte dalle 21 alle 6;

Il codice che ho scritto non mi stampa la buonanotte, nonostante siano passate le 21....
3.939 messaggi dal 28 gennaio 2003
guarda se va
Option Strict On

Module Module1

    Sub Main(args As String())
        'L'orario va da 0 a 24        
        Dim orario As Integer = 5

        If orario >= 0 AndAlso orario < 6 Then
            Console.WriteLine("Buona notte")

        ElseIf orario >= 6 AndAlso orario <= 12 Then
            Console.WriteLine("Buona giorno")

        ElseIf orario > 12 AndAlso orario < 21 Then
            Console.WriteLine("Buona sera")

        ElseIf orario >= 21 AndAlso orario <= 24 Then
            Console.WriteLine("Buona notte")

        End If



        Console.Write("Premere un tasto per continuare . . . ") : Console.ReadKey()
    End Sub


End Module


l'orario va da 0 a 24. Da te c'è un buco dalle 20 alle 21
28 messaggi dal 30 ottobre 2014
Salve,
secondo me la verifica della condizione logica 21 && 6 e' errata perche' ti fa un AND logico che non puo' mai risultare True.

E' giusto usare l'And con i range 12-20 e 6-12 perche' ad esempio un'ora puo' essere > 12 AND < 20.

Non va bene con 21 AND 6 perche' un'ora non puo' mai essere contemporaneamente maggiore di 12 e minore di 6.

Solo per il range 21-6 devi usare l'OR e non l'AND, cioe' se > 21 OR < 6.

   protected void Page_Load(object sender, EventArgs e)
        {
            int orario = DateTime.Now.Hour;
            if(orario >= 12 && orario <20)
            {
                msg.Text = "Buonasera";
            }
            if(orario >= 21 || orario <=6)
            {
                msg.Text = "Buonanotte";
            }
            if(orario >= 6 && orario <=12)
            {
                msg.Text = "Buongiorno";
            }
            
            Response.Write(DateTime.Now.Hour);
        }


Verifica poi:

1) anche i limiti inferiori di uno stesso orario ad es. >=6 e sull'altra riga <=6. L'uguale va messo in una sola condizione per non creare "intoppi".

2) secondo me meglio rifare l'If con le condizioni in ordine 6-12 poi 12-20 poi 21-6 per evitare errori ed e' piu' leggibile.

Ciao
Luciano

Ho deciso: preferisco essere il peggiore dei programmatori che il migliore dei NON programmatori.
e forse aggiungerei anche gli else (non necessari) per la leggibilità :)

Ormai programmano tutti... ma la professionalità appartiene a pochi

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.