Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1

    [JAVA] - Differenza tra due orari

    Salve ragazzi!! Rieccomi con un altro quesito esistenziale

    Allora, questo è quello che mi viene richiesto

    Scrivete un programma che legge due indicazioni orarie in formato militare (0900, 1730) e stampa il numero di ore e di minuti che separano i due orari.
    Ecco un esempio di esecuzione
    Please enter the first time: 0900
    Please enter the second time: 1730
    8 hours 30 minutes

    Otterrete una valutazione migliore se riuscite a gestire il caso in cui il primo orario è successivo
    al secondo orario
    Please enter the first time: 1730
    Please enter the second time: 0900
    15 hours 30 minutes

    Realizzate una classe TimeInterval il cui costruttore riceve due orari in formato militare. La classe
    dovrebbe avere due metodi, getHours e getMinutes.
    E questa la soluzione da me proposta
    codice:
    import java.util.GregorianCalendar;
    
    public class TimeInterval 
    {
    	public TimeInterval(int time1, int time2)
    	{
    		hour1 = time1/100;
    		hour2 = time2/100;
    		minute1  = time1%100;
    		minute2  = time2%100;
    		from.set(from.HOUR_OF_DAY, hour1);
    		from.set(from.MINUTE, minute1);
    		to.set(to.HOUR_OF_DAY, hour2);
    		to.set(to.MINUTE, minute2);
    		time1InMillisecond = from.getTimeInMillis();
    		time2InMillisecond = to.getTimeInMillis();
    		timeDifference = time2InMillisecond - time1InMillisecond;
    	}
    	
    	public long getHours()
    	{
    		return timeDifference/(1000*60*60);
    	}
    	
    	public long getMinutes()
    	{
    		return timeDifference/(1000*60);
    	}
    	
    	private int hour1, hour2, minute1, minute2;
    	private GregorianCalendar from = new GregorianCalendar();
    	private GregorianCalendar to = new GregorianCalendar();
    	private long time1InMillisecond, time2InMillisecond, timeDifference;
    	
    }
    Andando a testare il programma, quando stampo la differenza di orari mi restituisce 0:0.
    So che ho sbagliato qualcosa...ma non capisco cosa!!
    Plz help me

  2. #2
    Un pò di dettagli e spiegazioni...

    per prendere dall'intero che ricevo in ingresso la data e l'ora divido il numero per 100...il risultato mi dà l'ora, il resto i minuti...così ricavo hour1, hour2, minute1, minute2...

    il metodo set dovrebbe servirmi a settare un campo di in oggetto Calendar; quindi con from.set e to.set setto proprio l'ora e i minuti dei due oggetti GregorianCalendar...

    Per ottenere la differenza di orari provo a convertire i due oggetti in millisecondi e calcolarmi la differenza...

    Per trasformare da millisecondi in minuti divido i millisecondi per (1000*60), ovvero i millisecondi presenti in un minuto; ragionamento analogo per l'ora...

    Aspetto vostre risposte

    Sono accette bestemmie, insulti e prese in giro di tutti i tipi XD

  3. #3

    Solved

    Risolto!! Mi son scervellato inutilmente su un errore stupido!!

    L'errore è nel metodo getMinutes che va corretto così
    codice:
    	public long getMinutes()
    	{
    		return ((timeDifference/(1000*60))%60);
    	}
    Sono comunque ben accetti consigli per migliorare il programma, renderlo più semplice, leggibile o quant altro

  4. #4

    Re: Solved

    Originariamente inviato da tigerjack89
    Sono comunque ben accetti consigli per migliorare il programma, renderlo più semplice, leggibile o quant altro
    Per implementare getHours e getMinutes potresti anche non usare la classe GregorianCalendar (questo vale come reale alternativa), poi potresti far prendere 2 stringhe, anzichè due interi al costruttore (questo è un consiglio).
    Che ne dici?

  5. #5

    Re: Re: Solved

    Originariamente inviato da VincenzoTheBest
    Per implementare getHours e getMinutes potresti anche non usare la classe GregorianCalendar (questo vale come reale alternativa)
    in quale altro modo potrei farlo??

    poi potresti far prendere 2 stringhe, anzichè due interi al costruttore (questo è un consiglio).
    Questo l'ho fatto nel programma Simulator che simula la classe, creando un riquadro JOptionPane e trasformando le stringhe di input in interi con Integer.parseInt(...).
    Dici che sarebbe meglio farlo nella classe stessa??

    Ultima cosa: la valutazione migliore è impossibile prenderla senza usare l'if, vero?? hihi maledetti traduttori!!

    Grazie comunque

  6. #6

    Re: Re: Re: Solved

    Originariamente inviato da tigerjack89
    in quale altro modo potrei farlo??
    Non usando GregorianCalendar, e facendo più o meno lo stesso numero di calcoli.

    Originariamente inviato da tigerjack89
    Questo l'ho fatto nel programma Simulator che simula la classe, creando un riquadro JOptionPane e trasformando le stringhe di input in interi con Integer.parseInt(...).
    Dici che sarebbe meglio farlo nella classe stessa??
    Non intendevo questo. Prendendo due stringhe, deleghi alla classe il controllo della correttezza del dato senza troppe complicazioni. Oppure crei una classe wrapper OrarioMilitare che dunque, si occupa di rappresentare in modo corretto tali orari.

    Originariamente inviato da tigerjack89
    Ultima cosa: la valutazione migliore è impossibile prenderla senza usare l'if, vero??
    Riformula la domanda per favore..

  7. #7

    Re: Re: Re: Re: Solved

    Originariamente inviato da VincenzoTheBest
    Non usando GregorianCalendar, e facendo più o meno lo stesso numero di calcoli.
    Perdona la mia ignoranza in materia, ma non riesco a capire come...

    Non intendevo questo. Prendendo due stringhe, deleghi alla classe il controllo della correttezza del dato senza troppe complicazioni. Oppure crei una classe wrapper OrarioMilitare che dunque, si occupa di rappresentare in modo corretto tali orari.
    Yep ho capito cosa intendi; si può fare certamente


    Riformula la domanda per favore..
    L'esercizio chiede anche di gestire il caso in cui il primo orario sia successivo al secondo; ma senza usare strutture di controllo penso sia difficile, se non impossibile.

  8. #8

    Re: Re: Re: Re: Re: Solved

    Originariamente inviato da tigerjack89
    Perdona la mia ignoranza in materia, ma non riesco a capire come...
    Dovresti arrivarci da solo...ti dico solo che è possibile.

    Originariamente inviato da tigerjack89
    L'esercizio chiede anche di gestire il caso in cui il primo orario sia successivo al secondo; ma senza usare strutture di controllo penso sia difficile, se non impossibile.
    Ovvio.


  9. #9

    yep

    Originariamente inviato da VincenzoTheBest
    Dovresti arrivarci da solo...ti dico solo che è possibile.
    Forse ci sono; basterebbe moltiplicare le ora per 60 e poi sommarle ai minuti, dopodichè fara la differenza e fare il processo inverso per ritornare ore e minuti.
    In effetti fatto così la classe GregorianCalendar non serve proprio a nulla!!

    Era questa la tua idea???

  10. #10

    Re: yep

    Originariamente inviato da tigerjack89
    Era questa la tua idea???
    No..

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.