Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [JAVA] dubbi sulla modifica degli oggetti

    ciao
    sto cercando di modificare una parte del codice di un esercizio di java e mi son imbattuto
    in un dilemma sull uso degli oggetti :


    codice:
    
    import java.util.Date ;
    import java.util.GregorianCalendar ;
    
    
    
    
    public class Main3 
    {
    
    
    
    	private Date dataAppuntamentoInizio ;
    	private Date dataAppuntamentoFine ;
    
    
    
    
    public Main3 ()
    {
    
    
    GregorianCalendar chiama = new GregorianCalendar () ;
    
    chiama.set ( GregorianCalendar.DAY_OF_MONTH , GregorianCalendar.OCTOBER) ;
    chiama.set ( GregorianCalendar.HOUR_OF_DAY, 12  ) ;
    chiama.set ( GregorianCalendar.MINUTE, 20 ) ;
    chiama.set ( GregorianCalendar.SECOND, 10 ) ;
    chiama.set ( GregorianCalendar.YEAR, 2011 ) ;
    
    
    dataAppuntamentoInizio = chiama.getTime () ;
    dataAppuntamentoFine = chiama.getTime () ;
    
    
    }
    ho dichiarato come variabili di istanza oggetti della classe Date , cioè di un altra classe ;
    quanto è lecita questa cosa?



    ho inizializzato gli oggetti privati usando il GregorianCalendar , dichiarando il costruttore public




    codice:
    public void setDuration (int minutiDurata) // dipende dall istanza oggetto inizioAppuntamento
    	{
    		
    	// ho stabilito che la durata gli arriva in minuti 
    		
    		GregorianCalendar chiama = new GregorianCalendar () ;
    		chiama.setTime(dataAppuntamentoInizio) ; // carico il calendario con una data
    		
    		int oraInizio =  chiama.get (GregorianCalendar.HOUR_OF_DAY);
    		int minutoInizio = chiama.get (GregorianCalendar.MINUTE) ;
    		int minutiTotali = minutiDurata + minutoInizio ;
    		
    		
    	
    	
    		
    	 
    	 if ( minutiTotali <= 60 )
    		{
    		  
    			chiama.setTime(dataAppuntamentoFine) ; // carico il calendario e edito 
    			chiama.set(GregorianCalendar.MINUTE , minutiTotali) ;	
    			
    		}
    		 
    	 
    	 
    		else
    		{
    		
    			
    			int oreDiDurata = minutiTotali / 60 ;
    			int  minutiFinali = ( minutiTotali % 60 ) + minutoInizio;
    			int oraFinale = oraInizio + oreDiDurata ;
    			
    			chiama.setTime(dataAppuntamentoFine) ; // carico il calendario e edito  
    			
    		  
    			chiama.set(GregorianCalendar.HOUR ,  oraFinale ) ;
    			chiama.set (GregorianCalendar.MINUTE,  minutiFinali) ;
    		
    		 }
    	 
    	
    
    	}
    	
    	
    
    
    
    	
    	public int getDuration ()
    	{
    
    		
    		long msIniziali = dataAppuntamentoInizio.getTime () ;
    		long msFinali = dataAppuntamentoFine.getTime () ;
    		
    		GregorianCalendar chiama2 = new GregorianCalendar () ;
            chiama2.setTime(dataAppuntamentoFine) ; // carico il calendario con una data
    		int oraInizio =  chiama2.get (GregorianCalendar.MINUTE);
    		System.out.printf("\n%d", oraInizio);
    		
    		long msTotali = msFinali - msIniziali ;
    		
    
    		
    		long minutiTotali = ( msTotali / 1000 ) / 60 ;
    		
    		
    		return (int) minutiTotali ;
    	}

    il problema è nel metodo setDuration ;
    quando esco dal metodo il valore dell'oggetto dataAppuntamentoFine è lo stesso dell'altro oggetto , dataAppuntamentoInizio !
    com'è possibile tutto ciò?


    quando invoco il metodo getDuration dal main mi restituisce un valore in minuti che non è
    lecito ( sempre 0 )

    che cosa posso e non posso fare utilizzando un metodo di una classe e cercando di modificare un oggetto di un altra classe?

    qualcuno sa dove sbaglio?

    Grazie
    se non rispondo ai Pvt mandatemi una mail

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472

    Moderazione

    Il linguaggio Java è trattato in una sezione appositamente dedicata.
    Sposto la discussione.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    pardon , l'eccessiva fretta sempre controproducente !


    per chi fosse interessato posto il problema in 2 forme diverse , sottolineando
    perchè questo codice non funziona funzionava


    codice:
    
    
    import java.util.GregorianCalendar ;
    import java.util.Date ;
    
    
    
    
    public class Main3 
    {
    
    
    
    	  private Date dataAppuntamentoInizio ;
    	  private Date dataAppuntamentoFine ;
    
    
    
    
    
    public Main3 ()
    {
    
    	GregorianCalendar chiama = new GregorianCalendar () ;
    
    	 
    	 chiama.set ( GregorianCalendar.DAY_OF_MONTH , GregorianCalendar.OCTOBER) ;
    	 chiama.set ( GregorianCalendar.HOUR_OF_DAY, 12  ) ;
    	 chiama.set ( GregorianCalendar.MINUTE, 20 ) ;
    	 chiama.set ( GregorianCalendar.SECOND, 10 ) ;
    	 chiama.set ( GregorianCalendar.YEAR, 2011 ) ;
    	 
    	 
       /** è importante capire la differenza tra caricare GregorianCalendar con delle costanti e
        * poi ottenere un oggetto modificabile ;
        *  procedura corretta ; imposto le costanti nel calendario , e dopo ottengo l'oggetto  tempo
        *  con chiama.getTime() ;
        */
    	 
    	 dataAppuntamentoInizio = chiama.getTime () ;
    	 dataAppuntamentoFine = chiama.getTime () ;
    	 
    	
    
    
    
    
    }
    
    
    public void setDuration (int minutiDurata) // dipende dall istanza oggetto inizioAppuntamento
    	{
    		
    	// ho stabilito che la durata gli arriva in minuti 
    		
    	    GregorianCalendar chiama2 = new GregorianCalendar () ;
    		chiama2.setTime(dataAppuntamentoInizio) ;
    		
    		int oraInizio =  chiama2.get(GregorianCalendar.HOUR_OF_DAY);
    		int minutoInizio = chiama2.get (GregorianCalendar.MINUTE) ;
    		int minutiTotali = minutiDurata + minutoInizio ;
    		
    		chiama2.setTime(dataAppuntamentoFine) ;
    		
    		
    	
    		
    		
    		
    	 
    	 if ( minutiTotali <= 60 )
    		{
    		  
    	
    		 
    		 chiama2.set(GregorianCalendar.MINUTE , minutiTotali) ;	
    		 dataAppuntamentoFine = chiama2.getTime () ; /** chiama2.getTime() riscrive l'oggetto */
    		 /** riscrivo da zero l'oggetto , perchè non posso 
    		 modificare delle costanti nel calendario ! */
    	
    		}
    		 
    	 
    	 
    		else
    		{
    		
    			
    			int oreDiDurata = minutiTotali / 60 ;
    			int  minutiFinali =  minutiTotali % 60 ;
    			int oraFinale = oraInizio + oreDiDurata ;
    			
    		
    			chiama2.set (GregorianCalendar.HOUR_OF_DAY ,  oraFinale ) ;
    			chiama2.set (GregorianCalendar.MINUTE,  minutiFinali) ;
    			dataAppuntamentoFine = chiama2.getTime () ;
    			System.out.printf( "ore %d\n" ,chiama2.get (GregorianCalendar.HOUR_OF_DAY)  ) ;
    			
    			
    		
    		 }
    	 
    
    	
    
    	}
    	
    	
    	
    	public int getDuration ()
    	{
    
    		
    		long msIniziali = dataAppuntamentoInizio.getTime()  ;
    		long msFinali = dataAppuntamentoFine.getTime () ;
    		long msTotali = msFinali - msIniziali ;
    		long minutiTotali = ( msTotali / (1000 * 60 ) )  ;
    
    		
    		return (int) minutiTotali ;
    	}
    	
    
    } // fine classe
    questa è la versione corretta del mio codice
    il problema stava nel fatto che ero convinto di poter modificare delle costanti ( senza saperlo)..






    codice:
    
    
    import java.util.GregorianCalendar ;
    
    
    
    
    public class Main3 
    {
    
    
    
    	private GregorianCalendar dataAppuntamentoInizio ;
    	private GregorianCalendar dataAppuntamentoFine ;
    
    
    
    
    public Main3 ()
    {
    
    dataAppuntamentoInizio = new GregorianCalendar (2011, 12 ,12 ,12 , 30 ) ;
    dataAppuntamentoFine = new GregorianCalendar (2011, 12 ,12 ,12 , 30 ) ;
    
    
    }
    
    
    
    
    public void setDuration (int minutiDurata) // dipende dall istanza oggetto inizioAppuntamento
    	{
    		
    	// ho stabilito che la durata gli arriva in minuti 
    		
    	
    		
    		int oraInizio =  dataAppuntamentoInizio.get (GregorianCalendar.HOUR_OF_DAY);
    		int minutoInizio = dataAppuntamentoInizio.get (GregorianCalendar.MINUTE) ;
    		int minutiTotali = minutiDurata + minutoInizio ;	
    		
    	 
    	 if ( minutiTotali <= 60 )
    		{
    		  
    	
    		 dataAppuntamentoFine.set(GregorianCalendar.MINUTE , minutiTotali) ;	
    			
    		}
    		 
    	 
    	 
    		else
    		{
    		
    			
    			int oreDiDurata = minutiTotali / 60 ;
    			int  minutiFinali =  minutiTotali % 60 ;
    			int oraFinale = oraInizio + oreDiDurata ;
    			
    		
    			
    		  
    			dataAppuntamentoFine.set (GregorianCalendar.HOUR_OF_DAY ,  oraFinale ) ;
    			dataAppuntamentoFine.set (GregorianCalendar.MINUTE,  minutiFinali) ;
    			
    			
    		
    		 }
    	 
    	
    
    	}
    	
    	
    	
    	public int getDuration ()
    	{
    
    		
    		long msIniziali = dataAppuntamentoInizio.getTimeInMillis () ;
    		long msFinali = dataAppuntamentoFine.getTimeInMillis () ;
    		
    		
          
    		int oraInizio =  dataAppuntamentoInizio.get (GregorianCalendar.MINUTE);
    		System.out.printf("\n%d", oraInizio);
    		
    		long msTotali = msFinali - msIniziali ;
    		
    
    		
    		long minutiTotali = ( msTotali / (1000 * 60 ) )  ;
    		
    		
    		return (int) minutiTotali ;
    	}
    		
    
    }

    questa è una versione che non fa uso di Date

    spero che torni utile a qualcuno
    se non rispondo ai Pvt mandatemi una mail

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.