Repository 32bit  Forum
Repository 64bit  Wiki

[JAVA] errore nel compilamento

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.

Re: [JAVA] errore nel compilamento

Messaggioda targzeta » dom gen 15, 2012 13:16

Sì, è chiaro ed era chiaro anche dal codice che hai postato. Come vedi, quindi, ti si richiede di ritornare un solo valore e non 3. Tu devi semplicemente dire se la data che ti hanno passato è corretta oppure no. Io strutturerei il metodo verificaData in questo modo:
Codice: Seleziona tutto
se il giorno è sbagliato
  ritorna 0
se il mese è sbagliato
  ritorna 0
se l'anno è sbagliato
  ritorna 0
ritorna 1
in questo modo il processo arriverà in fondo (e ritornerà 1), se e solo se tutto è corretto. Stesso discorso se vuoi ritornare 'v' o 'f', basta che il prototipo del metodo sia 'char verificaData()' e poi sostituisci gli 0 con 'f' e gli 1 con 'v'.

Emanuele
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6194
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: [JAVA] errore nella compilazione

Messaggioda 414N » dom gen 15, 2012 14:04

Ciao e benvenuto :)
Prima di passare all'implementazione che ti suggerisco mi sembra doveroso farti alcune note:
  • Prima nota base (di stile): i nomi delle classi Java (e quindi dei file che le contengono) iniziano sempre con una maiuscola, per convenzione.
  • I controlli riguardanti il giorno sono un po' ridondanti. Ho provato a semplificarteli alterando il meno possibile il tuo algoritmo.
  • La funzione println stampa la stringa che le fornisci come argomento e va a capo (il "ln" finale sta proprio per line), percui il "\n" che poni in fondo alla stringa è superfluo se il tuo intento è solo quello di andare a capo dopo aver stampato la tua stringa.
  • Il processo che traduce un testo da una forma all'altra è detto compilazione, non compilamento
Ti riporto l'implementazione che ho ricavato aggiustando qua e là il codice che hai riportato.
NB: avevo scritto l'implementazione prima di leggere gli ultimi messaggi (soprattutto quello contenente la consegna), percui la parte centrale dell'algoritmo l'ho alterata in modo da lavorare esclusivamente con booleani. Tuttavia, tramite i due metodi "wrapper" che ho introdotto al volo ora (verificaDataChar e verificaDataInt) ottieni esattamente quanto richiesto dalla specifica. Se non conosci l'operatore ternario condizionale, sappi che funziona così:
Codice: Seleziona tutto
 condizione ? X : Y ;

equivalente a
Codice: Seleziona tutto
if ( condizione )
   X
else
   Y

Ecco l'implementazione, comunque:
Codice: Seleziona tutto
public class VerificaData {

   /**
    * Verifica che la data fornita in input rispetti i criteri di validità
    * imposti
    *
    * @param mese
    *            il mese da verificare
    * @param giorno
    *            il giorno da verificare
    * @param anno
    *            l'anno da verificare
    * @return true se la data è valida, false altrimenti
    */
   public static boolean verificaData(int mese, int giorno, int anno) {

      return verificaAnno(anno) && verificaMese(mese)
            && verificaGiorno(mese, giorno, anno);
   }

   /**
    * Wrapper per verificaData: converte i valori boolean ritornati (true o
    * false) in 1 o 0 (int)
    *
    * @param mese
    *            il mese da controllare
    * @param giorno
    *            il giorno da controllare
    * @param anno
    *            l'anno da controllare
    * @return 0 se la data è sbagliata, 1 altrimenti
    */

   public static int verificaDataInt(int mese, int giorno, int anno) {
      return verificaData(mese, giorno, anno) ? 1 : 0;
   }

   /**
    * Wrapper per verificaData: converte i valori boolean ritornati (true o
    * false) in 'v' o 'f' (char)
    *
    * @param mese
    *            il mese da controllare
    * @param giorno
    *            il giorno da controllare
    * @param anno
    *            l'anno da controllare
    * @return 0 se la data è sbagliata, 1 altrimenti
    */

   public static char verificaDataChar(int mese, int giorno, int anno) {
      return verificaData(mese, giorno, anno) ? 'v' : 'f';
   }

   /**
    * Metodo per il controllo della validità del giorno
    *
    * @param mese
    *            il mese della data da verificare
    * @param giorno
    *            il giorno della data da verificare
    * @param anno
    *            l'anno della data da verificare
    * @return vero se il giorno rispetta tutti i parametri, falso altrimenti
    */

   private static boolean verificaGiorno(int mese, int giorno, int anno) {

      if (giorno > 0 && giorno < 31 && mese != 2)
         /*
          * giorno compreso tra 1 e 30 e mese diverso da Febbraio: il giorno
          * va bene per forza
          */
         return true;

      if (giorno == 29 && mese == 2 && ((anno % 4 == 0 && anno % 100 != 0)
            || anno % 400 == 0))
         /*
          * mese = febbraio, giorno = 29, anno bisestile: ok
          */
         return true;

      if (giorno == 31)
         if ((mese == 1) || (mese == 3) || (mese == 5) || (mese == 7)
               || (mese == 8) || (mese == 10) || (mese == 12))
            /*
             * giorno = 31 e mese con 31 giorni: ok
             */
            return true;

      /*
       * Al di fuori di uno qualsiasi degli if precedenti: false
       */
      System.err.println("Giorno sbagliato e/o fuori contesto (" + giorno
            + "/" + mese + "/" + anno + ")");
      return false;
   }

   /**
    * Metodo per il controllo della validità del mese
    *
    * @param mese
    *            il mese da controllare
    * @return vero se il mese è compreso tra ]0,12], falso altrimenti
    */

   private static boolean verificaMese(int mese) {
      if (mese > 0 && mese <= 12)
         return true;
      System.err.println("Mese al di fuori dei valori di riferimento ("
            + mese + ")");
      return false;
   }

   /**
    * Metodo per il controllo della validità dell'anno
    *
    * @param anno
    *            l'anno da testare
    * @return vero se l'anno è compreso in [0,10000[, false altrimenti
    */

   private static boolean verificaAnno(int anno) {
      if (anno >= 0 && anno < 10000)
         return true;
      System.err.println("Anno al di fuori dei valori di riferimento ("
            + anno + ")");
      return false;
   }

   public static void main(String[] va) {
      System.out.println("Data 1/10/2000: " + verificaData(1, 10, 2000));
      System.out.println("Data 6/31/2001: " + verificaData(6, 31, 2001));
      System.out.println("Data 2/29/1900: " + verificaData(2, 29, 1900));
      System.out.println("Data 2/29/1600: " + verificaData(2, 29, 1600));
      System.out.println("Data 2/29/2008: " + verificaData(2, 29, 2008));
      System.out.println("Data 10/36/1990: " + verificaData(10, 36, 1990));
      System.out.println("Data 13/10/2011: " + verificaData(13, 10, 2011));
      System.out.println("Data 2/30/2011: " + verificaData(2, 30, 2001));
      System.out.println("Data 12/31/2012: " + verificaData(12, 31, 2012));
   }

}

Note sull'implementazione:
  • Ho spezzato i controlli su giorno, mese e anno in 3 metodi separati, per meglio suddividere il problema. Nota che i 3 metodi che ho introdotto hanno visibilità "private", quindi sono accessibili solo dall'interno della classe in questione.
  • I controlli sul giorno erano ridondanti:
    Codice: Seleziona tutto
    if(giorno > 0 && giorno <= 31){
       ...
    else if(giorno == 30) {
       ...

    Nel primo if controlli che il giorno sia un numero tra 1 e 31 (compreso). Nel caso così non sia, controlli che il giorno sia 30 (impossibile) e poi prosegui.
  • Quando un test fallisce, ho aggiunto una stampa informativa sul'error stream (tramite Sytem.err.println). Dato che è uno stream separato dall'output stream può darsi che le stampe non avvengano nella sequenza che ti aspetti. Puoi sempre modificare quelle stampe in modo che vadano a finire sull'output stream.
  • I commenti che iniziano con /** sono commenti javadoc, dotati di particolari annotazioni come @param, @return ecc. Questi commenti vengono letti dal programma javadoc per generare automaticamente la documentazione dell'API delle classi che scrivi proprio a partire da questi commenti.
Se qualcosa non ti fosse chiaro non esitare a chiedere.
Avatar utente
414N
Iper Master
Iper Master
 
Messaggi: 2882
Iscritto il: mer feb 13, 2008 16:19
Località: Bulagna
Slackware: 14.0 (x64)
Kernel: 3.2.29
Desktop: LXDE

Re: [JAVA] errore nel compilamento

Messaggioda gabbro » dom gen 15, 2012 18:01

Vi ringrazio per il tempo dedicatomi, e per le spiegazioni al quanto dettagliate, ma cosi rischio solo di impappinarmi il cervello, lo consegno con questo errore e poi mi farò dire dal prof come è il programma giusto, grazie ancora a tutti penso che su questo forum mi troverò benissimo :P
gabbro
Linux 1.0
Linux 1.0
 
Messaggi: 43
Iscritto il: gio gen 12, 2012 17:39
Slackware: 13.37 (32bit)

Re: [JAVA] errore nel compilamento

Messaggioda targzeta » dom gen 15, 2012 18:32

Guarda, non ti impappinare il cervello. Ti posto quello che intendevo io, tutto scritto in modo che tu possa tranquillamente capire. Applicati un po', cerca di capire e vedrai che è molto semplice:
Codice: Seleziona tutto
public class verificaData
{
   public static int verificaData(int giorno, int mese, int anno)
   {
      // controllo che l'anno sia valido
      if ( anno < 0 || anno > 10000 )
         return 0;

      // controllo che il mese sia valido
      if ( mese < 0 || mese > 12 )
         return 0;

      // controllo che il giorno sia valido
      if ( giorno < 0 || giorno > 31 )
         return 0;

      // febbraio
      if ( mese == 2 )
         // anno bisestile
         if ( ( anno % 4 == 0 && anno % 100 != 0 ) || anno % 400 == 0 )
            if ( giorno > 29 )
               return 0;
            else
               return 1;
         else
            // anno non bisestile
            if ( giorno > 28 )
               return 0;

      if ( giorno == 31 )
         // mesi di 30 giorni (febbraio e' gia' stato analizzato)
         if ( ( mese == 4 ) || (  mese == 6 ) ||
              ( mese == 9 ) || ( mese == 11 ) )
            return 0;

      // Tutto ok, la data è corretta!!!
      return 1;
   }

   public static void main(String[] va)
   {
      System.out.println(verificaData( 10 ,1 ,2000 )); // 1
      System.out.println(verificaData( 31 ,6 ,2001 )); // 0
      System.out.println(verificaData( 29 ,2 ,1900 )); // 0
      System.out.println(verificaData( 29 ,2 ,1600 )); // 1
      System.out.println(verificaData( 29 ,2 ,2008 )); // 1
      System.out.println(verificaData( 36 ,10 ,1990)); // 0
      System.out.println(verificaData( 10 ,13 ,2011)); // 0
      System.out.println(verificaData( 31 ,8 , 2010)); // 1
      System.out.println(verificaData( 30 ,2 , 2001)); // 0
      System.out.println(verificaData( 31 ,12 ,2012)); // 1
   }
}

Emanuele
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6194
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: [JAVA] errore nel compilamento

Messaggioda gabbro » lun gen 16, 2012 15:42

spina ha scritto:Guarda, non ti impappinare il cervello. Ti posto quello che intendevo io, tutto scritto in modo che tu possa tranquillamente capire. Applicati un po', cerca di capire e vedrai che è molto semplice:
Codice: Seleziona tutto
public class verificaData
{
   public static int verificaData(int giorno, int mese, int anno)
   {
      // controllo che l'anno sia valido
      if ( anno < 0 || anno > 10000 )
         return 0;

      // controllo che il mese sia valido
      if ( mese < 0 || mese > 12 )
         return 0;

      // controllo che il giorno sia valido
      if ( giorno < 0 || giorno > 31 )
         return 0;

      // febbraio
      if ( mese == 2 )
         // anno bisestile
         if ( ( anno % 4 == 0 && anno % 100 != 0 ) || anno % 400 == 0 )
            if ( giorno > 29 )
               return 0;
            else
               return 1;
         else
            // anno non bisestile
            if ( giorno > 28 )
               return 0;

      if ( giorno == 31 )
         // mesi di 30 giorni (febbraio e' gia' stato analizzato)
         if ( ( mese == 4 ) || (  mese == 6 ) ||
              ( mese == 9 ) || ( mese == 11 ) )
            return 0;

      // Tutto ok, la data è corretta!!!
      return 1;
   }

   public static void main(String[] va)
   {
      System.out.println(verificaData( 10 ,1 ,2000 )); // 1
      System.out.println(verificaData( 31 ,6 ,2001 )); // 0
      System.out.println(verificaData( 29 ,2 ,1900 )); // 0
      System.out.println(verificaData( 29 ,2 ,1600 )); // 1
      System.out.println(verificaData( 29 ,2 ,2008 )); // 1
      System.out.println(verificaData( 36 ,10 ,1990)); // 0
      System.out.println(verificaData( 10 ,13 ,2011)); // 0
      System.out.println(verificaData( 31 ,8 , 2010)); // 1
      System.out.println(verificaData( 30 ,2 , 2001)); // 0
      System.out.println(verificaData( 31 ,12 ,2012)); // 1
   }
}

Emanuele


:D Ho capito, mi metto al lavoroo! :P
gabbro
Linux 1.0
Linux 1.0
 
Messaggi: 43
Iscritto il: gio gen 12, 2012 17:39
Slackware: 13.37 (32bit)

Re: [JAVA] errore nel compilamento

Messaggioda gabbro » lun gen 16, 2012 16:33

ECCO IL CODICE:
Codice: Seleziona tutto
public class verificaData
{   
   public static int verificaData(int giorno, int mese, int anno)
   {   
     // dichiaro le variabili
     int testData;
     // inizializzo le variabili
     testData = 0;
     // controllo che l'anno sia valido
     if(anno > 0 && anno <= 10000)
     {
       // controllo che il mese sia valido
       if(mese > 0 && mese <= 12)
       {
         // controllo che il giorno sia valido
         if(giorno > 0 && giorno <= 31)
         {
           // febbraio
           if( mese == 2 )
           {
             // anno bisestile
             if(( anno % 4 == 0 && anno % 100 != 0 ) || anno % 400 == 0 )
             {
               if(giorno < 29 )
               {
                 testData = 1;
               }
             }
           }
         }
          if( giorno == 31)
          {
            if ( (mese == 1) || (mese == 3) || ( mese == 5 ) || (  mese == 7 ) || ( mese == 8 ) || ( mese == 10 ) || ( mese == 12) )
            { testData = 1;
            }
          }
       }
     }
    return testData;
   }
   public static void main(String[] va)
   {
     // dichiaro la variabile e la inizializzo
     System.out.println(verificaData( 10 ,1 ,2000 ));
     System.out.println(verificaData( 31 ,6 ,2001 ));
     System.out.println(verificaData( 29 ,2 ,1900 ));
     System.out.println(verificaData( 29 ,2 ,1600 ));
     System.out.println(verificaData( 29 ,2 ,2008 ));
     System.out.println(verificaData( 36 ,10 ,1990));
     System.out.println(verificaData( 10 ,13 ,2011));
     System.out.println(verificaData( 31 ,8 , 2010));
     System.out.println(verificaData( 30 ,2 , 2001));
     System.out.println(verificaData( 31 ,12 ,2012));
    }
}


Però l'output è sbagliato, dovrebbe venire 1,0,0,1,1,0,0,1,0,1 ma non è cosi, sicuramente ho sbagliato a mettere posto a qualche testData=1; ma non capisco dove :@
gabbro
Linux 1.0
Linux 1.0
 
Messaggi: 43
Iscritto il: gio gen 12, 2012 17:39
Slackware: 13.37 (32bit)

Re: [JAVA] errore nel compilamento

Messaggioda targzeta » lun gen 16, 2012 23:07

Hai un errore sull'anno bisestile '< 29' invece di '<= 29'.

Inoltre, paradossalmente, se una data è corretta e non è nei casi limite (vedi la prima data del tuo test), il metodo ritorna sempre 0, proprio perché, essendo tutto corretto testData non viene mai settata ad 1 e quindi rimane 0. Ecco perché io vado per esclusione. Il return non deve essere per forza l'ultima istruzione del metodo. Io ritorno 0 ogni volta che qualcosa non va, se invece va tutto bene ritorno 1.

Emanuele

P.S. Anche io avevo fatto un errore sull'anno bisestile, ora ho corretto il codice e sembra funzionare.
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6194
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: [JAVA] errore nel compilamento

Messaggioda gabbro » mar gen 17, 2012 16:21

escono tutti i risultati tranne il secondo.. a me esce 1 ma dovrebbe uscire 0 :/ Dai che c'è l'abbiamo quasi fatta .
Codice: Seleziona tutto
public class verificaData
{   
   public static int verificaData(int giorno, int mese, int anno)
   {   
     // dichiaro le variabili
     int testData;
     // inizializzo le variabili
     testData = 0;
     // controllo che l'anno sia valido
     if(anno > 0 && anno <= 10000)
     { // controllo che il mese sia valido
       if(mese > 0 && mese <= 12)
       { // controllo che il giorno sia valido
         if( giorno > 0 && giorno <= 31)
         { // controllo
           if( ( giorno == 31) && (mese == 4) || (mese == 6) || (mese == 9) || (mese == 11))
           { testData = 1;
           }
           else
           {
             if( (giorno == 30) && (mese == 1) || (mese == 3) || (mese == 5) || (mese == 7) || (mese == 8) || (mese == 10) || (mese == 12) )
             { testData = 1;
             }
             else
             {
               
               if ( mese == 2 )
               {
                 if ( giorno < 29 && giorno >= 1 )
                 { testData = 1;
                 }
                 else
                 {
                   if( giorno == 29 )
                   {
                     if ( ( anno % 4 == 0 && anno % 100 != 0 ) || anno % 400 == 0 )
                     {
                       testData = 1;
                     }
                   }
                 }
               }
               else
               {
                 testData = 1;
               }
             }
           }
         }
       }
     }
    return testData;
   }

   public static void main(String[] va)
   {
     // dichiaro la variabile e la inizializzo
     System.out.println(verificaData( 10 ,1 ,2000 ));
     System.out.println(verificaData( 31 ,6 ,2001 ));
     System.out.println(verificaData( 29 ,2 ,1900 ));
     System.out.println(verificaData( 29 ,2 ,1600 ));
     System.out.println(verificaData( 29 ,2 ,2008 ));
     System.out.println(verificaData( 36 ,10 ,1990));
     System.out.println(verificaData( 10 ,13 ,2011));
     System.out.println(verificaData( 31 ,8 , 2010));
     System.out.println(verificaData( 30 ,2 , 2001));
     System.out.println(verificaData( 31 ,12 ,2012));
    }
}
gabbro
Linux 1.0
Linux 1.0
 
Messaggi: 43
Iscritto il: gio gen 12, 2012 17:39
Slackware: 13.37 (32bit)

Re: [JAVA] errore nel compilamento

Messaggioda gabbro » mar gen 17, 2012 16:40

CI SONO RIUSCITOOOOO!

Codice: Seleziona tutto
public class verificaData
{   
   public static int verificaData(int giorno, int mese, int anno)
   {   
     // dichiaro le variabili
     int testData;
     // inizializzo le variabili
     testData = 0;
     // controllo che l'anno sia valido
     if(anno > 0 && anno <= 10000)
     { // controllo che il mese sia valido
       if(mese > 0 && mese <= 12)
       { // controllo che il giorno sia valido
         if( giorno > 0 && giorno <= 31)
         { // controllo
           if( ( giorno <= 30) && ((mese == 4) || (mese == 6) || (mese == 9) || (mese == 11)) )
           { testData = 1;
           }
           else
           {
             if( (giorno <= 31) && ((mese == 1) || (mese == 3) || (mese == 5) || (mese == 7) || (mese == 8) || (mese == 10) || (mese == 12)) )
             { testData = 1;
             }
             else
             {
               if ( mese == 2 )
               {
                 if ( giorno < 29 && giorno >= 1 )
                 { testData = 1;
                 }
                 else
                 {
                   if( giorno == 29 )
                   {
                     if ( ( anno % 4 == 0 && anno % 100 != 0 ) || anno % 400 == 0 )
                     { testData = 1;
                     }
                   }
                 }
               }
             }
           }
         }
       }
     }
    return testData;
   }

   public static void main(String[] va)
   {
     // dichiaro la variabile e la inizializzo
     System.out.println(verificaData( 10 ,1 ,2000 ));
     System.out.println(verificaData( 31 ,6 ,2001 ));
     System.out.println(verificaData( 29 ,2 ,1900 ));
     System.out.println(verificaData( 29 ,2 ,1600 ));
     System.out.println(verificaData( 29 ,2 ,2008 ));
     System.out.println(verificaData( 36 ,10 ,1990));
     System.out.println(verificaData( 10 ,13 ,2011));
     System.out.println(verificaData( 31 ,8 , 2010));
     System.out.println(verificaData( 30 ,2 , 2001));
     System.out.println(verificaData( 31 ,12 ,2012));
    }
}

FINALMENTE *o* e ora devo farlo anche in cpp, perl e python uffa :( :p
gabbro
Linux 1.0
Linux 1.0
 
Messaggi: 43
Iscritto il: gio gen 12, 2012 17:39
Slackware: 13.37 (32bit)

Re: [JAVA] errore nel compilamento

Messaggioda gabbro » mar gen 17, 2012 18:41

in cpp e java funziona, in perl ho un problema, mi da tutti i rusultati 0.. :/
Codice: Seleziona tutto
  print verificaData( 10 ,1 ,2000 );
  print "\n";
  print verificaData( 31 ,6 ,2001 );
  print "\n";
  print verificaData( 29 ,2 ,1900 );
  print "\n";
  print verificaData( 29 ,2 ,1600 );
  print "\n";
  print verificaData( 29 ,2 ,2008 );
  print "\n";
  print verificaData( 36 ,10 ,1990);
  print "\n";
  print verificaData( 10 ,13 ,2011);
  print "\n";
  print verificaData( 31 ,8 , 2010);
  print "\n";
  print verificaData( 30 ,2 , 2001);
  print "\n";
  print verificaData( 31 ,12 ,2012);
  print "\n";

sub verificaData(int giorno, int mese, int anno)
{
   $testData = 0;
   ## controllo che l'anno sia valido
   if(anno > 0 && anno <= 10000)
   {
    ## controllo che il mese sia valido
    if(mese > 0 && mese <= 12)
    { ## controllo che il giorno sia valido
     if( giorno > 0 && giorno <= 31)
     { ## controllo il giorno 30
       if( ( giorno <= 30) && ((mese == 4) || (mese == 6) || (mese == 9) || (mese == 11)) )
       { $testData = 1;
       }
       else
       { ## controllo il giorno 31
         if( (giorno <= 31) && ((mese == 1) || (mese == 3) || (mese == 5) || (mese == 7) || (mese == 8) || (mese == 10) || (mese == 12)) )
         { $testData = 1;
         }
         else
         { ## controllo se è febbraio
           if ( mese == 2 )
           {
             if ( giorno < 29 && giorno >= 1 )
             { $testData = 1;
             }
             else
             {
               if( giorno == 29 )
               { ## controllo se l'anno è bisestile
                 if ( ( anno % 4 == 0 && anno % 100 != 0 ) || anno % 400 == 0 )
                 { $testData = 1;
                 }
               }
             }
           }
         }
       }
     }
    }
   }
   return $testData;
}
gabbro
Linux 1.0
Linux 1.0
 
Messaggi: 43
Iscritto il: gio gen 12, 2012 17:39
Slackware: 13.37 (32bit)

Re: [JAVA] errore nel compilamento

Messaggioda TuxInTheMiddle » ven feb 17, 2012 8:28

gabbro ha scritto:CI SONO RIUSCITOOOOO!

Codice: Seleziona tutto
public class verificaData
{   
   public static int verificaData(int giorno, int mese, int anno)
   {   
     // dichiaro le variabili
     int testData;
     // inizializzo le variabili
     testData = 0;
     // controllo che l'anno sia valido
     if(anno > 0 && anno <= 10000)
     { // controllo che il mese sia valido
       if(mese > 0 && mese <= 12)
       { // controllo che il giorno sia valido
         if( giorno > 0 && giorno <= 31)
         { // controllo
           if( ( giorno <= 30) && ((mese == 4) || (mese == 6) || (mese == 9) || (mese == 11)) )
           { testData = 1;
           }
           else
           {
             if( (giorno <= 31) && ((mese == 1) || (mese == 3) || (mese == 5) || (mese == 7) || (mese == 8) || (mese == 10) || (mese == 12)) )
             { testData = 1;
             }
             else
             {
               if ( mese == 2 )
               {
                 if ( giorno < 29 && giorno >= 1 )
                 { testData = 1;
                 }
                 else
                 {
                   if( giorno == 29 )
                   {
                     if ( ( anno % 4 == 0 && anno % 100 != 0 ) || anno % 400 == 0 )
                     { testData = 1;
                     }
                   }
                 }
               }
             }
           }
         }
       }
     }
    return testData;
   }

   public static void main(String[] va)
   {
     // dichiaro la variabile e la inizializzo
     System.out.println(verificaData( 10 ,1 ,2000 ));
     System.out.println(verificaData( 31 ,6 ,2001 ));
     System.out.println(verificaData( 29 ,2 ,1900 ));
     System.out.println(verificaData( 29 ,2 ,1600 ));
     System.out.println(verificaData( 29 ,2 ,2008 ));
     System.out.println(verificaData( 36 ,10 ,1990));
     System.out.println(verificaData( 10 ,13 ,2011));
     System.out.println(verificaData( 31 ,8 , 2010));
     System.out.println(verificaData( 30 ,2 , 2001));
     System.out.println(verificaData( 31 ,12 ,2012));
    }
}

FINALMENTE *o* e ora devo farlo anche in cpp, perl e python uffa :( :p


Oddio...non è bellissimo come sta scritto questo codice...ma almeno funziona... :D
TuxInTheMiddle
Linux 1.0
Linux 1.0
 
Messaggi: 25
Iscritto il: ven feb 10, 2012 23:05
Slackware: x86_64 - current
Kernel: 3.8.8
Desktop: fluxbox

Precedente

Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti