- public class Alienzeit {
- // Klassenkonstante für Umrechnung "Alien-Minute" zu "Mensch-Sekunde"
- public static final int ALIEN_MINUTE = 64;
- // Klassenkonstante für Umrechnung "Alien-Stunde" zu "Mensch-Sekunde"
- public static final int ALIEN_HOUR = ALIEN_MINUTE * 64;
- // Klassenkonstante für Umrechnung "Alien-Tag" zu "Mensch-Sekunde"
- public static final int ALIEN_DAY = ALIEN_HOUR * 32;
- /**
- * Hauptprogramm.
- *
- * @param args Kommandozeilenparameter (String-Array)
- */
- public static void main(String[] args) {
- // Deklaration der Reisezeit...
- final int TRAVELTIME = 3600;
- // ^^ Put your time here...
- // Deklaration Array mit AlienZuMensch-Faktoren [Tag, Stunde, Minute]
- int[] arrIntAlienFactors = {ALIEN_DAY, ALIEN_HOUR, ALIEN_MINUTE};
- // Deklaration Array mit Mensch-Zeit-Faktoren [Tag, Stunde, Minute]
- int[] arrIntHumanFactors = {24 * 60 * 60, 60 * 60, 60};
- /*
- Deklaration Array mit ausgerechneten Anteilen für Tag, Stunde, Minute
- anhand des übergebenen Faktoren-Arrays
- */
- int[] arrIntAlienTimes = secondsToTime(TRAVELTIME, arrIntAlienFactors);
- // siehe oben - nur für die Mensch-Zeit
- int[] arrIntHumanTimes = secondsToTime(TRAVELTIME, arrIntHumanFactors);
- // Deklaration Array mit String-Namen für die Zeit-Faktoren
- String[] arrStrTimeNames = {"Tage", "Stunden", "Minuten"};
- // Ausgabe
- System.out.println("Reisezeit " + TRAVELTIME + " Sekunden");
- // Ausgabe mittels Hilfsmethode - Übergabe von Zeit-Array für Mensch/Alien und Namen-Array
- System.out.println("In \"Alienzeit\" beträgt dieses: " + arrTimeToString(arrIntAlienTimes, arrStrTimeNames));
- System.out.println("In \"Erdzeit\" beträgt dieses: " + arrTimeToString(arrIntHumanTimes, arrStrTimeNames));
- }
- /**
- * Hilfsfunktion generiert aus Integer "timeInSeconds" (Sekunden) das ein
- * Integer-Array mit Hilfe der übergebenen Faktoren (via Int-Array, siehe
- * Alienzeit::main() für Deklaration).
- *
- * @param timeInSeconds Zeit in Sekunden
- * @param arrIntFactors Integer-Array mit Faktoren für die Zerlegung
- */
- private static int[] secondsToTime(int timeInSeconds, int[] arrIntFactors) {
- /*
- Deklaration eines neuen Arrays mit gleicher Element-Anzahl wie
- arrIntFactors für Rückgabe - da alles Objekte, bitte klonen, sonst
- gibt's nur 'ne Referenz.
- */
- int[] arrIntTime = arrIntFactors.clone();
- // Für jedes Element im Array arrIntFactors
- for (int i = 0; i < arrIntFactors.length; i++) {
- int intFactor = arrIntFactors[i];
- if (timeInSeconds >= intFactor) {
- int intMultiplier = (int) (timeInSeconds / intFactor);
- timeInSeconds -= (intMultiplier * intFactor);
- /*
- Setzte den Multiplikatorwert in NEUES Array ein (X Tage, X
- Stunden, X Minuten etc.)
- */
- arrIntTime[i] = intMultiplier;
- } else {
- arrIntTime[i] = 0;
- }
- }
- return arrIntTime;
- }
- /**
- * Hilfsfunktion generiert lesbaren String der Zeit (aus Integer-Array) mit Hilfe eines
- * übergebenen String-Arrays mit den Namen für die faktorisierten "Zeiten".
- * Alle "Zeiten" werden im Format 00NAME angegeben. Immer 2 Stellen (mit 0
- * nach Links aufgefüllt [String-Padding Left]) + Name.
- *
- * @param arrIntTime Integer-Array (Intern: Zeit-Array)
- * @param arrStringNames String-Array mit Namen für die Zeitabschnitte
- */
- private static String arrTimeToString(int[] arrIntTime, String[] arrStringNames) {
- // Deklariere Return-String als Leerstring...
- String strOutput = "";
- /*
- Wenn Array mit Zeitabschnitten nicht die gleiche Anzahl der Elemente
- enthält wie Array mit den Namen für die Abschnitte, gib Fehler aus
- und gib Leerstring zurück.
- */
- if (arrIntTime.length != arrStringNames.length) {
- System.err.println("Zeit-Array enthält nicht die gleiche Anzahl an Elementen wie Namen-Array.");
- System.out.println("FEHLER: Zeit-Array enthält nicht die gleiche Anzahl an Elementen wie Namen-Array.");
- return "";
- }
- /*
- Für jedes Element im Array arrStringNames (könnte auch arrIntTime
- sein, aber da beide die gleiche Anzahl der Elemente enthalten
- Überprüfung oben])
- */
- for (int i = 0; i < arrIntTime.length; i++) {
- int intTime = arrIntTime[i];
- String strName = arrStringNames[i];
- /*
- Wenn Output-String (return-String) noch leer, dann spare dir das
- voranstellen eines Leerzeichens.
- */
- if (strOutput.length() > 0) {
- strOutput += " ";
- }
- /*
- Hänge formatierte Ausgabe von Zeit und Namen (siehe Aufgaben-
- Stellung) an den return-String (Output-String) an.
- */
- strOutput += String.format("%02d%s", intTime, strName);
- }
- return strOutput;
- }
- }