Repository 32bit  Forum
Repository 64bit  Wiki

[JAVA] errore nel compilamento

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata e la versione del Kernel. Questi dati aiutano le persone che possono rispondere.
2) Specificare sempre il tipo di shell (bash, sh, csh, etc...)
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 dell'ultima regola 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 14: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
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: 5907
Iscritto il: gio nov 03, 2005 15: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 15: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: 2844
Iscritto il: mer feb 13, 2008 17:19
Località: Bulagna
Slackware: 14.0 (x64)
Kernel: 3.2.29
Desktop: LXDE

Re: [JAVA] errore nel compilamento

Messaggioda gabbro » dom gen 15, 2012 19: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 18:39
Slackware: 13.37 (32bit)

Re: [JAVA] errore nel compilamento

Messaggioda targzeta » dom gen 15, 2012 19: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
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: 5907
Iscritto il: gio nov 03, 2005 15: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 16: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 18:39
Slackware: 13.37 (32bit)

Re: [JAVA] errore nel compilamento

Messaggioda gabbro » lun gen 16, 2012 17: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 18:39
Slackware: 13.37 (32bit)

Re: [JAVA] errore nel compilamento

Messaggioda targzeta » mar gen 17, 2012 0: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.
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: 5907
Iscritto il: gio nov 03, 2005 15: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 17: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 18:39
Slackware: 13.37 (32bit)

Re: [JAVA] errore nel compilamento

Messaggioda gabbro » mar gen 17, 2012 17: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 18:39
Slackware: 13.37 (32bit)

Re: [JAVA] errore nel compilamento

Messaggioda gabbro » mar gen 17, 2012 19: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 18:39
Slackware: 13.37 (32bit)

Re: [JAVA] errore nel compilamento

Messaggioda TuxInTheMiddle » ven feb 17, 2012 9: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: sab feb 11, 2012 0:05
Slackware: x86_64 - current
Kernel: 3.8.8
Desktop: fluxbox

Precedente

Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite