[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.
Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6629
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: [JAVA] errore nel compilamento

Messaggio da targzeta »

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

Avatar utente
414N
Iper Master
Iper Master
Messaggi: 2922
Iscritto il: mer 13 feb 2008, 16:19
Slackware: 15.0
Kernel: 5.15.19
Desktop: KDE5
Località: Bulagna
Contatta:

Re: [JAVA] errore nella compilazione

Messaggio da 414N »

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.

gabbro
Linux 0.x
Linux 0.x
Messaggi: 43
Iscritto il: gio 12 gen 2012, 17:39
Slackware: 13.37 (32bit)

Re: [JAVA] errore nel compilamento

Messaggio da gabbro »

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

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6629
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: [JAVA] errore nel compilamento

Messaggio da targzeta »

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

gabbro
Linux 0.x
Linux 0.x
Messaggi: 43
Iscritto il: gio 12 gen 2012, 17:39
Slackware: 13.37 (32bit)

Re: [JAVA] errore nel compilamento

Messaggio da gabbro »

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 0.x
Linux 0.x
Messaggi: 43
Iscritto il: gio 12 gen 2012, 17:39
Slackware: 13.37 (32bit)

Re: [JAVA] errore nel compilamento

Messaggio da gabbro »

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 :@

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6629
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: [JAVA] errore nel compilamento

Messaggio da targzeta »

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

gabbro
Linux 0.x
Linux 0.x
Messaggi: 43
Iscritto il: gio 12 gen 2012, 17:39
Slackware: 13.37 (32bit)

Re: [JAVA] errore nel compilamento

Messaggio da gabbro »

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 0.x
Linux 0.x
Messaggi: 43
Iscritto il: gio 12 gen 2012, 17:39
Slackware: 13.37 (32bit)

Re: [JAVA] errore nel compilamento

Messaggio da gabbro »

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 0.x
Linux 0.x
Messaggi: 43
Iscritto il: gio 12 gen 2012, 17:39
Slackware: 13.37 (32bit)

Re: [JAVA] errore nel compilamento

Messaggio da gabbro »

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;
}

TuxInTheMiddle
Linux 0.x
Linux 0.x
Messaggi: 25
Iscritto il: ven 10 feb 2012, 23:05
Slackware: x86_64 - current
Kernel: 3.8.8
Desktop: fluxbox

Re: [JAVA] errore nel compilamento

Messaggio da TuxInTheMiddle »

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

Rispondi