2016-03-27 14 views
0

Dies ist eine Übungsfrage aus Java Software Solutions: Grundlagen der Programmgestaltung von Lewis & Loftus, 4. Ausgabe; Frage PP2.6 (hier ist eine link)Java: Konvertierung einer Eingabe von Sekunden in Stunden/Minuten/Sekunden

Frage lautet wie folgt: "Erstellen Sie ein Projekt, das einen Wert repräsentiert eine Anzahl von Sekunden liest, drucken Sie dann die entsprechende Menge an Zeit als eine Kombination von Stunden, Minuten und Sekunden. (beispielsweise 9999 Sekunden entspricht bis 2 Stunden, 46 Minuten und 39 Sekunden).“

ich habe bisher versucht die folgende

public static void main(String[] args) 
{ 
    Scanner scan = new Scanner(System.in); 

    double totalSecs, seconds, minutes, hours; 

    System.out.println("Enter number of seconds: "); 

    totalSecs = scan.nextInt(); 

    hours = totalSecs/3600; 
    minutes = (Math.abs(Math.round(hours)-hours))*60; 
    seconds = (Math.abs(Math.round(minutes)-minutes))*60; 

    System.out.print(hours + "\n" + minutes + "\n" + seconds); 

} 

Antwort kam zu, Stunden: 2,7775 Minuten: 13,350000000000009 Sekunden: 21,00000000000051

Was will ich tun nehmen die Dezimalstellen von, sagen wir, Stunden und multiplizieren Sie sie mit 60 Minuten zu erhalten und den Prozess für Sekunden wiederholen. Ich habe jedoch Schwierigkeiten, es herauszufinden, daher die unordentliche Lösung von (Math.abs) etc.

Was würden Sie mir empfehlen, zu ändern/hinzufügen? Vielen Dank!

Hinweis: Dies ist ein Buch für Anfänger, daher habe ich nicht viel mehr Operationen gelernt als die, die ich bereits im Code angegeben habe. Als solche habe ich die Lösung für die früheren Male, die diese Frage gestellt wurde, nicht verstanden.

Antwort

1

ist hier eine viel einfachere Art und Weise tun:

public static void main (String[] args) throws Exception { 
    SimpleDateFormat sf = new SimpleDateFormat("HH:mm:ss"); 
    TimeZone.setDefault(TimeZone.getTimeZone("GMT")); 
    System.out.println(sf.format(new Date(9999000))); 
} 

Hinweis: Bitte beachten Sie, dass dies nur die Ausgabe in 24-Stunden-Format und wenn Anzahl der Stunden an, ist größer als 24 dann Werde einen Tag erhöhen und neu beginnen. Zum Beispiel werden 30 Stunden als 06:xx:xx angezeigt. Außerdem müssen Sie die Eingabe in Millisekunden statt in Sekunden übergeben.

Wenn Sie es Ihren Weg machen wollen, dann sollten Sie wahrscheinlich so etwas wie dies tun:

public static void main (String[] args) throws Exception { 
    long input = 9999; 
    long hours = (input - input%3600)/3600; 
    long minutes = (input%3600 - input%3600%60)/60; 
    long seconds = input%3600%60; 
    System.out.println("Hours: " + hours + " Minutes: " + minutes + " Seconds: " + seconds); 
} 

Ausgang:

Hours: 2 Minutes: 46 Seconds: 39 
+0

Danke, aber ich wollte versuchen, die Frage mit den Methoden zu lösen, die ich bereits kenne. Das SimpleDateFormat ist nichts, dem ich begegnet bin, aber danke, dass du es mir gezeigt hast! EDIT: Ihre Antwort bearbeiten ist mehr von dem, was ich gesucht habe, vielen Dank! – Newman

+0

@ user2004685 Zuerst gibt Ihr Beispiel 04:46:39 als Ergebnis, ist es wahr? oder wegen Gebietsschema, Zeitzone usw.? –

+0

@ YusufK. Ja, das liegt an der TimeZone. Sie müssen es auf 'GMT' einstellen. – user2004685

3

Als Alternative von user2004685 ‚s Antwort;

int seconds = 9999; 
int hour = 9999/(60 * 60); //int variables holds only integer so hour will be 2 
seconds = 9999 % (60 * 60); // use modulo to take seconds without hours so it will be 2799 
int minute = seconds/60; //same as int variable so minute will be 49 
seconds = seconds % 60; // modulo again to take only seconds 
System.out.println(hour + ":" + minute + ":" + seconds); 
+0

Hey! Danke, dass du es so beantwortet hast, wie ich es geschrieben habe (außer dem Modulo), da ich es mit dem Wissen, das ich bereits habe, lösen wollte. – Newman

+0

@Newman Gern geschehen, wenn Sie versuchen, ein Countdown-Programm zu erstellen, funktioniert SimpleDateFromat nicht wie erwartet (für größere Werte als 24 Stunden). Sie sollten also als beantwortet berechnen. –