Zeitintervall erstellen: z.B. 4000 Sekunden = 01:06:40

Alpinwhite

Aktives Mitglied
Hallo, im Studium sollen wir ein Zeitintervall erstellen, dass eine Sekunden-Eingabe vom Benutzer in hh:mm:ss umrechnet. Wir haben leider keine richtige Einweisung bekommen und müssen alles mehr oder weniger im Selbststudium erarbeiten, daher glaube ich auch dass die while-Schleife noch nicht richtig ist, wie sie ist. Im Moment kann ich lediglich eine Zahl in das Programm eingeben und dann ist keine Eingabe mehr möglich. Folgendes Schema habe ich mir überlegt:

public class Zeitintervall {
public static void main ( String[] args) {
int stunden=0;
int minuten=0;
int sekunden=0;
int zeit=0;
int rest=0;

System.out.println("Geben Sie einen Zeitintervall ein:");
zeit=Input.readInt();

while (zeit<360000 && zeit>0); {
stunden=(zeit/3600);
rest=(zeit-3600*stunden);
minuten=rest/60;
sekunden=rest-60*minuten;

System.out.println("stunden" + ":" + "minuten" + ":" + "sekunden");

}
while (zeit>=360000 && zeit<0) {
System.out.println("Ungültige Zahl");
}
}

}
 
Das ist dein Code:
Java:
public class Zeitintervall {
	public static void main(String[] args) {
		int stunden = 0;
		int minuten = 0;
		int sekunden = 0;
		int zeit = 0;
		int rest = 0;

		System.out.println("Geben Sie einen Zeitintervall ein:");
		zeit = Input.readInt();

		while (zeit < 360000 && zeit > 0)
			;
		{
			stunden = (zeit / 3600);
			rest = (zeit - 3600 * stunden);
			minuten = rest / 60;
			sekunden = rest - 60 * minuten;

			System.out.println("stunden" + ":" + "minuten" + ":" + "sekunden");

		}
		while (zeit >= 360000 && zeit < 0) {
			System.out.println("Ungültige Zahl");
		}
	}

}

Bei mir kompiliert es nicht. Schuld ist das Input in folgender Zeile:
Java:
zeit = Input.readInt();

Deine While-Schleife funktioniert wahrscheinlich nicht wegen dem Semikolon:
Java:
while (zeit < 360000 && zeit > 0)
	;
{
 
Moin,
vielleicht ein Satz zur Erklärung :
Bei mir kompiliert es nicht. Schuld ist das Input in folgender Zeile:
zeit = Input.readInt();
Die Variable "Input" gibt es nicht! Du musst sie vorher deklarieren!!

Deine While-Schleife funktioniert wahrscheinlich nicht wegen dem Semikolon
Nicht nur wahrscheinlich, sondern mit mit Sicherheit 😀
Das Semikolon beendet den Befehl und der nachfolgende Block wird dadurch sequentiell, also genau einmal, durchlaufen!

VG Klaus
 
An Unis ist es üblich dass die Studenten eine Klasse gestellt bekommen um Eingaben von der Konsole vorzunehmen.
Daher würde ich einfach mal in den Raum werfen dass Input keine Variable ist.
Input wird eine Klasse mit der statischen Methode readInt() sein.

while (zeit >= 360000 && zeit < 0) {
System.out.println("Ungültige Zahl");
}
Bist du dir sicher dass du hier eine while Schleife benutzen willst?
 
Moinsen,
An Unis ist es üblich dass die Studenten eine Klasse gestellt bekommen um Eingaben von der Konsole vorzunehmen.
Daher würde ich einfach mal in den Raum werfen dass Input keine Variable ist.
Input wird eine Klasse mit der statischen Methode readInt() sein.
ok, wenn's ein statischer Aufruf ist, hast Du natürlich Recht!
Ich hatte jetzt irgendwie einen Scanner im Hinterkopf und dachte an eine entsprechende Objektvariable ...

VG Klaus

EDIT: guter Einwand mit der while-Schleife 🙂
 
Ok das Semikolon habe ich entfernt. Ich habe nochmal kompiliert und eine Zahl eingeben, danach wird unendlich oft "Stunden:Minuten:Sekunden" ausgegeben.

Bist du dir sicher dass du hier eine while Schleife benutzen willst?

Nein leider nicht, das ist mein erstes Programm. Wäre es dann so besser:
else {
system.out.print("Ungültige Zahl")

Ja wir haben eine Klasse gestellt bekommen für ungültige Eingaben
 
danach wird unendlich oft "Stunden:Minuten:Sekunden" ausgegeben
Jetzt überleg mal warum das so sein könnte.


Mit einem else würde das Programm nicht compilieren. Überleg noch mal oder schau noch mal nach was es für Kontrollstrukturen in der Programmierung gibt und welche für den Fall "WENN etwas ist Dann tue was" geeignet wäre.
 
Java:
System.out.println("stunden" + ":" + "minuten" + ":" + "sekunden");
Die Anführungszeichen müssen weg.

PS: Den Rest einer Division kann man auch mithilfe des Modulo-Operators ( Prozentzeichen % ) berechnen.
 
Jetzt überleg mal warum das so sein könnte.


Mit einem else würde das Programm nicht compilieren. Überleg noch mal oder schau noch mal nach was es für Kontrollstrukturen in der Programmierung gibt und welche für den Fall "WENN etwas ist Dann tue was" geeignet wäre.

Ah! Ja natürlich. Habe es jetzt so zum Laufen gebracht:

public class Zeitintervall {
public static void main ( String[] args) {
int stunden = 0;
int minuten = 0;
int sekunden = 0;
int zeit;
int rest;


System.out.println("Geben Sie einen Zeitintervall ein:");
zeit=Input.readInt();

if (zeit < 360000 && zeit >= 0) {
stunden=(zeit/3600);
rest=(zeit-3600*stunden);
minuten=rest/60;
sekunden=rest-60*minuten;

System.out.println(stunden + ":" + minuten + ":" + sekunden);

}
else {
System.out.println("Ungültige Zahl");
}
}

}


Was mir allerdings noch nicht gefällt ist wenn ich z.B. 354 Sekunden eingebe zeigt er 0:5:54 an und nicht 00:05:54.
 
Java:
public class Zeitintervall8 {
    public static void main ( String[] args) {
    int stunden = 0;
    int minuten = 0;
    int sekunden = 0;
    int zeit;
    int rest;
    String hh, mm, ss;
   
   
    System.out.println("Geben Sie einen Zeitintervall ein:");
        zeit=Input.readInt();
       
        if (zeit < 360000 && zeit >= 0) {
        stunden=(zeit/3600);
        rest=(zeit-3600*stunden);
        minuten=rest/60;
        sekunden=rest-60*minuten;
       
       
        }
        else if (zeit > 360000) {
        System.out.println("Die eingegebene Zeitspanne ist zu groß");
    }
        else if (zeit < 0) {
        System.out.println("Die eingegebene Zeitspanne darf nicht negativ sein!");
        }
        if (stunden < 10) {
            hh=0 + minuten;
        } else {
            hh="0" + minuten;
        }   
        if (minuten < 10) {
            mm="0" + minuten;
        } else {
            mm="" + minuten;
        }
        if (sekunden < 10) {
            ss="0" + sekunden;
        } else {
            ss="" + sekunden;
        }
        System.out.println(hh + ":" + mm + ":" + ss);
    }   
        }

Ich stehe immer noch vor dem Problem dass keine 0 vor Einzelnen Zahlen angezeigt wird. Also 3:2:54 anstatt 03:02:54. Ich habe versucht es so zu lösen, aber das funktioniert nicht und das mit printf verstehe ich nicht. Wo liegt der Fehler?
 
Und wenn du es unbedingt selbst machen willst dann hast du einfach ein bisschen geschludert und ein paar Verschreiber drin:
Code:
        if (stunden < 10) {
            hh = "0" + stunden;
        } else {
            hh = "" + stunden;
        }
        if (minuten < 10) {
            mm = "0" + minuten;
        } else {
            mm = "" + minuten;
        }
        if (sekunden < 10) {
            ss = "0" + sekunden;
        } else {
            ss = "" + sekunden;
        }
        System.out.println(hh + ":" + mm + ":" + ss);
 
Der "Fehler" ist dass du nicht printf benutzt. Was daran verstehst du nicht ? Hier ist auch ein Beispiel mit führenden Nullen dabei:

http://openbook.rheinwerk-verlag.de...tml#dodtp502391df-4eac-4eb6-a246-312c07a323f4

Ja ich weiß leider nicht, wie man das richtig schreibt. Wie gesagt das ist mein erstes Programm und bei den Beispielen aus dem Link werde ich leider auch nicht schlau. Ich habe es jetzt so versucht, was nicht funktioniert:

Code:
public class Zeitintervall14 {
    public static void main ( String[] args) {
    int stunden = 0;
    int minuten = 0;
    int sekunden = 0;
    int zeit;
    int rest;
    String hh, mm, ss;
   
   
    System.out.println("Geben Sie einen Zeitintervall ein:");
        zeit=Input.readInt();
       
        if (zeit < 360000 && zeit >= 0) {
        stunden=(zeit/3600);
        rest=(zeit-3600*stunden);
        minuten=rest/60;
        sekunden=rest-60*minuten;
       
       
        }
        else if (zeit > 360000) {
        System.out.println("Die eingegebene Zeitspanne ist zu groß");
    }
        else if (zeit < 0) {
        System.out.println("Die eingegebene Zeitspanne darf nicht negativ sein!");
        }
        for ( int i = 1 ; i < 10; i++ )
        System.out.printf(%0 + stunden + ":" + %0 + minuten +":" + %0 + sekunden);
    }   
        }
 
Beispiel:
Java:
PrintStream o = System.out;
int zahl = 321;
o.printf("%05d",  zahl);

Ausgabe:
00321
 

Zurück
Oben