Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [JAVA]switch

  1. #1
    Utente bannato
    Registrato dal
    Dec 2000
    Messaggi
    147

    [JAVA]switch

    il problema riguarda le solite data anche se questo è semplice. una volta inserito una data devo chiamare un metodo che verifica l'esattezza della data valutando una variabile booleana
    mi creo questo costruttore
    public class Data {

    public Data(int mese, int giorno, int anno) {
    verifica = true;
    _mese = mese;
    _giorno = giorno;
    _anno = anno;

    if(_mese<1 & _mese>12)
    verifica = false;

    switch (_mese) {
    case 1: if(_giorno < 1 & _giorno > 31){
    verifica = false;
    break;
    .
    .
    .
    con il primo if verifico l'esattezza del mese e poi con il case vorrei verificare l'esattezza dei giorni in base al mese scelto infatti i case sono 12. il problema è che non mi fa la verifica sui giorni infatti se inserisco il mese sbagliato il metodo di verifica mi restituisce l'errore ma non verifica mai i giorni.
    Cosa sarà??

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Sarà che hai scritto una cosa errata: come fa un numero ad essere contemporaneamente minore di 1 e maggiore di 12? Oppure, nei giorni, come fa ad essere contemporaneamente minore di 1 e maggiore di 31? Hai sbagliato operatore: non devi usare un AND (che sarebbe &&, perchè & è un operatore bit a bit), ma devi usare un OR (||).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it L'avatar di Angelo1974
    Registrato dal
    Feb 2003
    Messaggi
    1,107
    Ciao. Lele ha perfettamente ragione. Avresti dovuto scrivere:

    public class Data {

    public Data(int mese, int giorno, int anno) {
    verifica = true;
    _mese = mese;
    _giorno = giorno;
    _anno = anno;

    if( _mese<12 && _mese>1 )
    verifica = false;

    switch (_mese) {
    case 1: if(_giorno < 31 & _giorno > 1){
    verifica = false;
    break;
    .
    .
    .
    Se vuoi trovare l'arcobaleno, devi sopportare la pioggia

  4. #4
    Utente di HTML.it L'avatar di Angelo1974
    Registrato dal
    Feb 2003
    Messaggi
    1,107
    Piccola rettifica.... ovviamente gli estremi sono compresi.
    Ciao
    Se vuoi trovare l'arcobaleno, devi sopportare la pioggia

  5. #5
    Utente bannato
    Registrato dal
    Dec 2000
    Messaggi
    147
    Lele hai perfettamente ragione ho capito l'erore ma la seconda risposta di Angelo è sempre con l'operatore && and ma non devo mettere l'OR ||
    Inoltre ti vorrei chiedere una spiegazione sugli operatori riguarda la differenza tra & e &&. mi spiegheresti con un esemepio, magari, la differenza??
    Grazie sei un amico

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    La differenza fra il mio suggerimento e l'operatore usato da Angelo stà nel fatto che, da quello che avevi scritto tu, facevi un test per verificare se la data immessa era sbagliata (logica negativa). In questo caso dovresti controllare se il numero del mese è inferiore a 1 OPPURE (||) maggiore di 31.

    Angelo ha adottato una soluzione differente (una logica positiva): lui controlla se la data inserita è corretta: così lui controlla se il numero del mese è compreso fra 1 e 31 (ossia, se è SIA MAGGIORE di 1, SIA MINORE di 31: &&).

    La differenza fra gli operatori (&& e &) e (|| e |) è una semplice differenza di fuzionamento: i primi effettuano un confronto booleano sui termini, mentre gli altri si usano per operazioni BIT a BIT.

    I primi si usano per costruire espressioni booleane, mentre i secondi vengono usati per cambiare i valori di alcuni bit (in un numero, ad esempio) o per conoscere il valore di particolari bit.

    Esempio:
    questo codice ritorna il valore del bit meno significativo del numero che gli è fornito come parametro.
    codice:
    public int bitMenoSignificativo(int valore) {
       return (valore & 1);
    }
    
    FUNZIONAMENTO: (gli interi in Java sono a 32 bit, ma supponiamo siano a 8)
    prende la rappresentazione binaria del numero e la mette in AND con 1.
    Ricordo che un AND da 1 se entrambi gli operandi sono 1, altrimenti dà 0:
    
    valore = 7 --> 00000111
    
    00000111 AND
    00000001
    --------
    00000001
    Spero di essere stato sufficientemente chiaro.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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.