java- Zeitumrechner
Hi, ich habe ein Problem bei einem kleinen Java Programm. (Bin Anfänger). Bei meinem Programm soll der User eine Anzahl von Sekunden eingeben. Das Programm soll dann die Zeit in Stunden Minuten und Sekunden umrechnen. Mit dem Format HH:MM:SS.
Hier ist der Programmcode:
import java.util.Scanner;
public class Sekunden {
public static void main(String[] args) {
double s, m, h, aus;
System.out.print("Geben Sie eine Anzahl von Sekunden ein. Das Programm wird die Stunden und Minuten errechnen:");
s=new Scanner(System.in).nextInt();
System.out.println(s+" Sekunden sind ");
h=s/3600;
m=s%3600;
s=s%3600%60;
System.out.println((int)h+":"+(int)m+":"+(int)s);
}
}
Hier die Ausgabe:
Geben Sie eine Anzahl von Sekunden ein. Das Programm wird die Stunden und Minuten errechnen:3723 3723.0 Sekunden sind 1:123:3
Ich hab als Beispiel die Zahl 3723 geschrieben. Das wären dann 1:02:03 Stunden. Aber wie ihr seht hört es bei den Minuten nicht bei 60 auf. Wo liegt der F
2 Antworten
Jungs bzw. Mädels, Ihr redet hier einfach aneinander vorbei und um den heißen Brei herum!
In der Vorlage werden in m genauso Sekunden abgelegt wie in s, nachdem der Stundenanteil weggeschmissen wurde (%3600). Das zeigt das Vorlage-Programm auch an: 123 Sekunden über 3600 hinaus. Vollkommen korrekt - entsprechend dem, was der Programmierer angefordert hat. Allerdings sollen ja wohl nicht die Sekunden, sondern die Minuten angezeigt werden. Da müssen die Sekunden also durch die 60 Sekunden pro Minute noch dividiert werden. "%" ist KEINE (!) Division, sondern eine REST- (!) -Bildung. Die Doppel-Rest-Division bei den Sekunden "s" ist übrigens Nonsense: ein "%60" ist nur eine "engere" Form von "%3600", und da 3600 auch noch durch 60 teilbar ist, ist das "%3600" überflüssig!
In der Entgegnung vom "teudschlerer" wird zwar sinnvoll dividiert, aber erstens nicht mit Ganzzahlen (was auch in der Vorlage nicht konsequent passiert), zweitens nicht abgeschnitten (alias abgerundet). Falls der "teudschlerer" sich die Mühe macht, seine berechneten Werte m und h mal in die Formel für seine s einzusetzen, wird er merken, daß das Stuß ist. Mit Ganzzahlen wäre es was anderes.
==================
Fazit: Macht Variablen, die sowieso von vornherein nur Ganzzahlen tragen sollen, auch tatsächlich zu Ganzzahl-Variablen! Laßt von vornherein mit Ganzzahlen rechnen, dann braucht Ihr nicht erst mühevoll zu runden (und darauf zu achten, daß dann auch tatsächlich AB-gerundet und nicht zum nächstliegenden Wert gerundet wird)!
Und macht Euch nochmal einen gründlichen Kopf über den Unterschied zwischen Quotient und Rest bei einer Division! Das war mal Stoff von irgendwo aus Klasse 3 oder 4 glaube ich, oder?! Ich meine nicht den Operator - den behandelt man in der Schule nicht -, sondern die Division mit Rest!
Der Fehler liegt ganz klar an der Berechnung. Eine Zahl modulo 3600 kann alles zwischen 0 und 3599 ergeben. Ist auch ganz logisch. 500 modulo 3600 ist zum Beispiel 500. Warum nicht einfach so:
m = s / 60;
h = m / 60;
s = s - m x 60 - h x 60
m = m - hx60
Das funktioniert bei mir nicht. bei Sekunden kommt da eine negative Zahl