Guest

Untitled

By: a guest on Jan 28th, 2012  |  syntax: None  |  size: 5.30 KB  |  hits: 7  |  expires: Never
download  |  raw  |  embed  |  report abuse
Copied
  1. public class Alienzeit {
  2.     // Klassenkonstante für Umrechnung "Alien-Minute" zu "Mensch-Sekunde"
  3.  
  4.     public static final int ALIEN_MINUTE = 64;
  5.     // Klassenkonstante für Umrechnung "Alien-Stunde" zu "Mensch-Sekunde"
  6.     public static final int ALIEN_HOUR = ALIEN_MINUTE * 64;
  7.     // Klassenkonstante für Umrechnung "Alien-Tag" zu "Mensch-Sekunde"
  8.     public static final int ALIEN_DAY = ALIEN_HOUR * 32;
  9.  
  10.     /**
  11.      * Hauptprogramm.
  12.      *
  13.      * @param args Kommandozeilenparameter (String-Array)
  14.      */
  15.     public static void main(String[] args) {
  16.         // Deklaration der Reisezeit...
  17.         final int TRAVELTIME = 3600;
  18.         //                     ^^ Put your time here...
  19.  
  20.  
  21.         // Deklaration Array mit AlienZuMensch-Faktoren [Tag, Stunde, Minute]
  22.         int[] arrIntAlienFactors = {ALIEN_DAY, ALIEN_HOUR, ALIEN_MINUTE};
  23.         // Deklaration Array mit Mensch-Zeit-Faktoren [Tag, Stunde, Minute]
  24.         int[] arrIntHumanFactors = {24 * 60 * 60, 60 * 60, 60};
  25.  
  26.         /*
  27.         Deklaration Array mit ausgerechneten Anteilen für Tag, Stunde, Minute
  28.         anhand des übergebenen Faktoren-Arrays
  29.          */
  30.         int[] arrIntAlienTimes = secondsToTime(TRAVELTIME, arrIntAlienFactors);
  31.         // siehe oben - nur für die Mensch-Zeit
  32.         int[] arrIntHumanTimes = secondsToTime(TRAVELTIME, arrIntHumanFactors);
  33.  
  34.         // Deklaration Array mit String-Namen für die Zeit-Faktoren
  35.         String[] arrStrTimeNames = {"Tage", "Stunden", "Minuten"};
  36.  
  37.         // Ausgabe
  38.         System.out.println("Reisezeit " + TRAVELTIME + " Sekunden");
  39.  
  40.         // Ausgabe mittels Hilfsmethode - Übergabe von Zeit-Array für Mensch/Alien und Namen-Array
  41.         System.out.println("In \"Alienzeit\" beträgt dieses: " + arrTimeToString(arrIntAlienTimes, arrStrTimeNames));
  42.         System.out.println("In \"Erdzeit\" beträgt dieses: " + arrTimeToString(arrIntHumanTimes, arrStrTimeNames));
  43.     }
  44.  
  45.     /**
  46.      * Hilfsfunktion generiert aus Integer "timeInSeconds" (Sekunden) das ein
  47.      * Integer-Array mit Hilfe der übergebenen Faktoren (via Int-Array, siehe
  48.      * Alienzeit::main() für Deklaration).
  49.      *
  50.      * @param timeInSeconds Zeit in Sekunden
  51.      * @param arrIntFactors Integer-Array mit Faktoren für die Zerlegung
  52.      */
  53.     private static int[] secondsToTime(int timeInSeconds, int[] arrIntFactors) {
  54.         /*
  55.             Deklaration eines neuen Arrays mit gleicher Element-Anzahl wie
  56.             arrIntFactors für Rückgabe - da alles Objekte, bitte klonen, sonst
  57.             gibt's nur 'ne Referenz.
  58.          */
  59.         int[] arrIntTime = arrIntFactors.clone();
  60.  
  61.         // Für jedes Element im Array arrIntFactors
  62.         for (int i = 0; i < arrIntFactors.length; i++) {
  63.             int intFactor = arrIntFactors[i];
  64.             if (timeInSeconds >= intFactor) {
  65.                 int intMultiplier = (int) (timeInSeconds / intFactor);
  66.                 timeInSeconds -= (intMultiplier * intFactor);
  67.                 /*
  68.                 Setzte den Multiplikatorwert in NEUES Array ein (X Tage, X
  69.                 Stunden, X Minuten etc.)
  70.                  */
  71.                 arrIntTime[i] = intMultiplier;
  72.             } else {
  73.                 arrIntTime[i] = 0;
  74.             }
  75.         }
  76.         return arrIntTime;
  77.     }
  78.  
  79.     /**
  80.      * Hilfsfunktion generiert lesbaren String der Zeit (aus Integer-Array) mit Hilfe eines
  81.      * übergebenen String-Arrays mit den Namen für die faktorisierten "Zeiten".
  82.      * Alle "Zeiten" werden im Format 00NAME angegeben. Immer 2 Stellen (mit 0
  83.      * nach Links aufgefüllt [String-Padding Left]) + Name.
  84.      *
  85.      * @param arrIntTime Integer-Array (Intern: Zeit-Array)
  86.      * @param arrStringNames String-Array mit Namen für die Zeitabschnitte
  87.      */
  88.     private static String arrTimeToString(int[] arrIntTime, String[] arrStringNames) {
  89.         // Deklariere Return-String als Leerstring...
  90.         String strOutput = "";
  91.  
  92.         /*
  93.         Wenn Array mit Zeitabschnitten nicht die gleiche Anzahl der Elemente
  94.         enthält wie Array mit den Namen für die Abschnitte, gib Fehler aus
  95.         und gib Leerstring zurück.
  96.          */
  97.         if (arrIntTime.length != arrStringNames.length) {
  98.             System.err.println("Zeit-Array enthält nicht die gleiche Anzahl an Elementen wie Namen-Array.");
  99.             System.out.println("FEHLER: Zeit-Array enthält nicht die gleiche Anzahl an Elementen wie Namen-Array.");
  100.             return "";
  101.         }
  102.  
  103.         /*
  104.         Für jedes Element im Array arrStringNames (könnte auch arrIntTime
  105.         sein, aber da beide die gleiche Anzahl der Elemente enthalten
  106.         Überprüfung oben])
  107.          */
  108.         for (int i = 0; i < arrIntTime.length; i++) {
  109.             int intTime = arrIntTime[i];
  110.             String strName = arrStringNames[i];
  111.             /*
  112.             Wenn Output-String (return-String) noch leer, dann spare dir das
  113.             voranstellen eines Leerzeichens.
  114.              */
  115.             if (strOutput.length() > 0) {
  116.                 strOutput += " ";
  117.             }
  118.             /*
  119.             Hänge formatierte Ausgabe von Zeit und Namen (siehe Aufgaben-
  120.             Stellung) an den return-String (Output-String) an.
  121.              */
  122.             strOutput += String.format("%02d%s", intTime, strName);
  123.         }
  124.         return strOutput;
  125.     }
  126. }