Guten Tag zusammen,
Wie dem titel ja schon zu entnehmen ist geht es um die Umrechnung verschiedener Zeiten und zwar sollen wir von Mikrosekunden in sekunden und dann ins format mm:ss umrechnen.
der gneau Wortlaut ist:
"Innerhalb des vorliegenden Projektes sollen Zeitangaben wie Abspieldauer oder die aktuelle Position im Lied bei der Ausgabe in der grafischen Oberfläche immer im Format mm:ss dargestellt werden, d.h. es gibt immer zwei Ziffern für die Minutenangabe und zwei Ziffern für die Sekundenangabe, wobei die beiden Angaben durch einen Doppelpunkt getrennt sind.
Für die interne Verarbeitung selbst werden die Zeiten in Mikrosekunden verwaltet, so dass hier eine Umrechnung erforderlich ist. Nach der Umrechnung von Mikrosekunden in das Format mm:ss werden verbleibende Sekundenbruchteile ignoriert. d. h. etwaige Nachkommastellen werden verworfen und es wird nicht gerundet. So führt etwa die intern verwaltete Abspieldauer von 305862000 Mikrosekunden zu einer Ausgabe des Strings "05:05" (05 Minuten und 05 Sekunden).
Die Aufbereitung der intern in Mikrosekunden gespeichert Zeiten als formatierten String wird sowohl für die Angabe der Gesamtabspieldauer als auch für die Ausgabe der aktuellen Position im Lied benötigt. Es bietet sich daher an, diese Funktionalität in eine Hilfsfunktion auszulagern.
Implementieren Sie in der Klasse TaggedFile die Methode public static String timeFormatter(long microtime)
Die Methode wandelt eine Zeitangabe in Mikrosekunden nach den obigen Angaben in das Format "mm:ss" um. Erstellen und nutzen Sie während der Implementierung der Methode timeFormatter() zusätzlich Unit-Tests. Fügen Sie Ihre Tests der Datei UTestTaggedFile hinzu.
Im folgenden ist ein Muster für einen Unit-Test angegeben:"
Die Junittests habe ich schon implementiert und füge sie weiter unten an!
"Die Methode timeFormatter() soll auch die beiden nachfolgenden Möglichkeiten für fehlerhafte
bzw. problematische Argumentwerte behandeln:
1. Der übergebene Zeitwert in Mikrosekunden ist negativ. In diesem Fall soll die Methode folgende Ausnahme (Exception) generieren: throw new RuntimeException("Negativ time value provided");
2. Der übergebene Zeitwert in Mikrosekunden ist zu groß für das Format "mm:ss". In diesem Fall soll die Methode folgende Ausnahme (Exception) generieren: throw new RuntimeException("Time value exceeds allowed format");
Hinweis: überlegen Sie sich zuerst, ab welchem Wert ein Überlauf auftreten wird.
Die korrekte Auslösung von Ausnahmen (Exceptions) kann durch Unit-Tests der folgende Art getestet werden. Fügen Sie Ihre Tests wieder der Datei UTestTaggedFile hinzu."
Entschuldigung für den langen Text aber wenn ich es kürze können misverständnisse auftreten. Im Prinzip ist die Formatter Methode nich wirklich kompliziert und ich hänge an den Junittests fest, welche mir ehrlich gesagt generell noch etwas fremd sind.
Hier nun mein Code:
Hier noch die Junittests: (Der Junittest public void test_timeFormatter_12() stammt von mir und ist fehlerhaft. Die anderen Junittests habe ich lediglich aus dem Aufgabenblatt übernommen und funktionieren auch)
Vielen Dank im Voraus!
Ich hoffe ihr könnt mir weiterhelfen.
Wie dem titel ja schon zu entnehmen ist geht es um die Umrechnung verschiedener Zeiten und zwar sollen wir von Mikrosekunden in sekunden und dann ins format mm:ss umrechnen.
der gneau Wortlaut ist:
"Innerhalb des vorliegenden Projektes sollen Zeitangaben wie Abspieldauer oder die aktuelle Position im Lied bei der Ausgabe in der grafischen Oberfläche immer im Format mm:ss dargestellt werden, d.h. es gibt immer zwei Ziffern für die Minutenangabe und zwei Ziffern für die Sekundenangabe, wobei die beiden Angaben durch einen Doppelpunkt getrennt sind.
Für die interne Verarbeitung selbst werden die Zeiten in Mikrosekunden verwaltet, so dass hier eine Umrechnung erforderlich ist. Nach der Umrechnung von Mikrosekunden in das Format mm:ss werden verbleibende Sekundenbruchteile ignoriert. d. h. etwaige Nachkommastellen werden verworfen und es wird nicht gerundet. So führt etwa die intern verwaltete Abspieldauer von 305862000 Mikrosekunden zu einer Ausgabe des Strings "05:05" (05 Minuten und 05 Sekunden).
Die Aufbereitung der intern in Mikrosekunden gespeichert Zeiten als formatierten String wird sowohl für die Angabe der Gesamtabspieldauer als auch für die Ausgabe der aktuellen Position im Lied benötigt. Es bietet sich daher an, diese Funktionalität in eine Hilfsfunktion auszulagern.
Implementieren Sie in der Klasse TaggedFile die Methode public static String timeFormatter(long microtime)
Die Methode wandelt eine Zeitangabe in Mikrosekunden nach den obigen Angaben in das Format "mm:ss" um. Erstellen und nutzen Sie während der Implementierung der Methode timeFormatter() zusätzlich Unit-Tests. Fügen Sie Ihre Tests der Datei UTestTaggedFile hinzu.
Im folgenden ist ein Muster für einen Unit-Test angegeben:"
Die Junittests habe ich schon implementiert und füge sie weiter unten an!
"Die Methode timeFormatter() soll auch die beiden nachfolgenden Möglichkeiten für fehlerhafte
bzw. problematische Argumentwerte behandeln:
1. Der übergebene Zeitwert in Mikrosekunden ist negativ. In diesem Fall soll die Methode folgende Ausnahme (Exception) generieren: throw new RuntimeException("Negativ time value provided");
2. Der übergebene Zeitwert in Mikrosekunden ist zu groß für das Format "mm:ss". In diesem Fall soll die Methode folgende Ausnahme (Exception) generieren: throw new RuntimeException("Time value exceeds allowed format");
Hinweis: überlegen Sie sich zuerst, ab welchem Wert ein Überlauf auftreten wird.
Die korrekte Auslösung von Ausnahmen (Exceptions) kann durch Unit-Tests der folgende Art getestet werden. Fügen Sie Ihre Tests wieder der Datei UTestTaggedFile hinzu."
Entschuldigung für den langen Text aber wenn ich es kürze können misverständnisse auftreten. Im Prinzip ist die Formatter Methode nich wirklich kompliziert und ich hänge an den Junittests fest, welche mir ehrlich gesagt generell noch etwas fremd sind.
Hier nun mein Code:
Java:
public static String timeFormatter(long microtime){
//Negative value of microtime
if(microtime < 0){
throw new RuntimeException("Negative Time value provided");
}
//Transformation from microseconds to seconds
long timeInSeconds = microtime / 1000000;
//Checking out of range 99:59 (mm:ss)
if(timeInSeconds > 5999){
throw new RuntimeException("Time value exceeds allowed format");
}
//Transformation in mm:ss
long TimeInMinutes = timeInSeconds / 60;
timeInSeconds = timeInSeconds - (TimeInMinutes * 60);
String parsedTime = "";
if(TimeInMinutes < 10){
parsedTime = "0" + TimeInMinutes;
}else{
parsedTime = "" + TimeInMinutes;
}
parsedTime = parsedTime + ":";
if(timeInSeconds < 10){
parsedTime = parsedTime + "0" + timeInSeconds;
}else{
parsedTime = parsedTime + "" + timeInSeconds;
}
return parsedTime;
}
Hier noch die Junittests: (Der Junittest public void test_timeFormatter_12() stammt von mir und ist fehlerhaft. Die anderen Junittests habe ich lediglich aus dem Aufgabenblatt übernommen und funktionieren auch)
Java:
import junit.framework.TestCase;
public class UTestTaggedFile extends TestCase {
public void test_play_01() throws Exception{
TaggedFile tf = new TaggedFile("audiofiles/Motiv 5. Symphonie von Beethoven.ogg");
tf.play();
tf.stop();
}
public void test_timeFormatter_10() throws Exception {
assertEquals("Wrong time format", "05:05",
TaggedFile.timeFormatter(305862000L));
}
public void test_timeFormatter_08() throws Exception {
try{
TaggedFile.timeFormatter(-1L);
fail("Time value underflows");
} catch (RuntimeException e){
}
}
public void test_timeFormatter_12() throws Exception {
try{
TaggedFile.timeFormatter(5999000001L);
fail("Time Value exceeds allowed format");
}catch(RuntimeException e){
}
}
}
Vielen Dank im Voraus!
Ich hoffe ihr könnt mir weiterhelfen.