Esercizio Java date

di il
9 risposte

Esercizio Java date

Ciao a tutti,
sono nuovo nel forum, chiedo scusa se ho sbagliato postare qua la mia domanda.
Comunque ho da svolgere questo esercizio di java:
"Esercizio Java – classi Data e DataConOrario
Definire una classe di nome Data, con tre attributi, giorno, mese, anno, di tipo intero, e con i seguenti costruttori e metodi public:
- costruttore con tre parametri, giorno, mese, anno. N.B. controlla che 1 = giorno = 31
e 1 = mese = 12 e in caso contrario solleva un'eccezione “data non valida”
- metodo toString() che converte questa data (this) nella stringa “giorno/mese/anno”.
Definire una classe di nome DataConOrario, derivata da Data, con un nuovo attributo secondi (di tipo numero intero) che rappresenta un orario in termini di secondi. La classe offre in particolare i seguenti costruttori e metodi public:
- costruttore con quattro parametri, giorno, mese, anno, ora;
- metodo booleano precede(d) che restituisce true se questa data_con_orario (this) è precedente la data_con_orario d;
- metodo toString() che converte questa data_con_orario (this) nella stringa “giorno/mese/anno – h: ore”, dove ore rappresenta l'ora del giorno corrispon- dente al valore dell'attributo secondi di questo oggetto.
Definire una classe di nome ProvaDataConOrario, contenente un main, che crea due oggetti di tipo DataConOrario, rispettivamente con valori 23/9/2014 h.9 e 30/5/2014 h.10, determina la più vecchia delle due (utilizzando il metodo precede) e quindi la stampa su std output (utilizzando il metodo toString)."

Ho creato la classe Data e la classe derivata DataConOrario ma non riesco a creare il metodo booleano precede(d), avete qualche suggerimento da darmi?
Vi ringrazio in anticipo

9 Risposte

  • Re: Esercizio Java date

    colt40 ha scritto:


    - metodo booleano precede(d) che restituisce true se questa data_con_orario (this) è precedente la data_con_orario d;

    non riesco a creare il metodo booleano precede(d), avete qualche suggerimento da darmi?
    Devi fare i confronti tra i due DataConOrario partendo dal campo di "peso" maggiore, ovvero l'anno. Se l'anno this è inferiore all'anno di d, sai già che precede, altrimenti se è uguale allora prosegui con il campo di peso inferiore (mese), altrimenti sai già che il DataConOrario this non precede d. Ecc...
  • Re: Esercizio Java date

    Ok grazie, ma per crearlo posso utilizzare lo statement "if - else"?
  • Re: Esercizio Java date

    Non è difficile! Nella classe DataConOrario basta fare un metodo fatto così
    
    public boolean  precede(DataConOrario d){
    	int annoA = this.getAnno();
    	int annoB = d.getAnno();	
    	if(annoA!=annoB){
    		return annoA>annoB;
    	}
    	
    	int meseA = this.getMese();
    	int meseB = d.getMese();	
    	if(meseA!=meseB){
    		return meseA>meseB;
    	}
    	
    	// e avanti così per giorno, ora secondi....
    			
    	return false; // in questo caso le date sono uguali!
    	
    }
    

    Che è l'implementazione di

    andbin ha scritto:


    Devi fare i confronti tra i due DataConOrario partendo dal campo di "peso" maggiore, ovvero l'anno. Se l'anno this è inferiore all'anno di d, sai già che precede, altrimenti se è uguale allora prosegui con il campo di peso inferiore (mese), altrimenti sai già che il DataConOrario this non precede d. Ecc...
  • Re: Esercizio Java date

    Grazie ma come devo utilizzare il get?
  • Re: Esercizio Java date

    Ah se non hai fatto i getters and setters puoi semplicemente scrivere
    
    public boolean  precede(DataConOrario d){
       int annoA = this.anno;
       int annoB = d.anno;
       if(annoA!=annoB){
          return annoA>annoB;
       }
       
       int meseA = this.mese;
       int meseB = d.mese;   
       if(meseA!=meseB){
          return meseA>meseB;
       }
       
       // e avanti così per giorno, ora secondi....
             
       return false; // in questo caso le date sono uguali!
       
    }
    
  • Re: Esercizio Java date

    colt40 ha scritto:


    Grazie ma come devo utilizzare il get?
    In che senso? Nelle classi "bean" (come le due) i campi dovrebbero essere tenuti private e poi bisognerebbe fornire i metodi "accessori" getter e/o setter public.
  • Re: Esercizio Java date

    Grazie per i suggerimenti ho provato a mettere insieme il tutto adesso riesco far stampare su std output se è precedente o no. Però non sono riuscito a far stampare la data intera vi allego il mio codice.
    Grazie ancora dell'aiuto.

    Classe Data
    public class Data 
    {
    int giorno;
    int mese;
    int anno;
    public Data (int unGiorno, int unMese, int unAnno)
    {
    	giorno = unGiorno;
    	mese = unMese;
    	anno = unAnno;
    	}
    public Data()
    {
    	
    }
    public  void controlloData()
    {
    	if(giorno<1 || giorno>31 && mese<1 || mese>12)
    		System.out.println("Data non valida" ) ;
    	
    }
        public String toString(){
    	 return giorno+"/"+mese + "/" + anno ;	
    			}
    }
    
    Classe DataConOrario
    
    public class DataConOrario extends Data  {
    	
    	public int orario;
    
    	public DataConOrario(int unGiorno, int unMese, int unAnno, int unOrario)
    	{
    		giorno = unGiorno;
    		mese = unMese;
    		anno = unAnno;
    		orario = unOrario;
    		
    }
    	public String toString(){
    		 return giorno+"/"+mese + "/" + anno +" - h:" + orario ;	
    	}
    	public boolean  precede(DataConOrario d){
    		   int annoA = this.anno;
    		   int annoB = d.anno;
    		   if(annoA!=annoB){
    		      return annoA>annoB;
    		   }
    		   
    		   int meseA = this.mese;
    		   int meseB = d.mese;   
    		   if(meseA!=meseB){
    		      return meseA>meseB;
    		   }
    		   int giornoA = this.giorno;
    		   int giornoB = d.giorno;   
    		   if(giornoA!=giornoB){
    		      return giornoA>giornoB;
    		   }
    		   int orarioA = this.orario;
    		   int orarioB = d.orario;   
    		   if(orarioA!=orarioB){
    		      return orarioA>orarioB;
    		   }
    		         
    		   return false;
    		   
    		}
    		
    }
    
    Main
    
    public class Main {
    
    	public static void main(String[] x) 
    	{
    
    		
    		
    		
    		DataConOrario d1=new DataConOrario(30,5,2014,10);
    		DataConOrario d2=new DataConOrario(30,5,2014,10);
    		
    		
            System.out.println(d1.precede(d2));
            System.out.println(d2.precede(d1));
            
            
    }
    }
    
    
  • Re: Esercizio Java date

    Anzi ho aggiunto questa parte nel main, secondo voi può andare?
    if (d1.precede(d2)==true){
            	 System.out.println("La data e'" + d2);
            	 
            }
            else {
            	System.out.println("La data precedente e'" + d1);
            }
  • Re: Esercizio Java date

    Il testo dice che nel costruttore di Data dovresti fare un controllo su giorno e mese e se invalidi lanciare una eccezione. Non lo vedo nel tuo codice.
    E il testo non dice di mettere un costruttore no-arg (sebbene non faccia male averlo).

    Inoltre sebbene hai messo i campi di Data al livello di "default" (=package level) e quindi potresti assegnarli anche da DataConOrario (presupponendo sia nello stesso package), in realtà NON dovresti farlo. L'idioma tipico è di passare i dati possibili al super-costruttore, così sfrutti la logica nella classe base, senza doverla ripetere, cioè controllo e assegnamento.

    Non ho verificato bene il resto.
Devi accedere o registrarti per scrivere nel forum
9 risposte