Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package edu.kit.informatik;
- /**
- * @author Nico Krüger
- */
- public class Converter {
- /**
- * benötigten Variablen erstellt, diese privat und static gesetzt, damit man
- * nicht von außen darauf zugreifen kann und man kein objekt benötigt um die
- * Methode auszuführen.
- */
- private static int r;
- private static int g;
- private static int b;
- private static double c;
- private static double m;
- private static double y;
- private static double k;
- /**
- * Methode, die erst den String einliest, den der Benutzer über das Terminal
- * eingibt, diesen dann mithilfe von regex in einen String Array aufsplittet in
- * 4 Teile, separiert von Leerzeichen und Semikolon. Die while schleife fängt
- * automatisch an, da isRunning beim starten des Programms mit true
- * initialisiert wird. Falls man nun als ersten Teil des Strings "quit" eingibt,
- * beendet das Programm wie gewünscht. Falls nicht versucht das Programm, den
- * 2,3 und 4. Teil vom eingegebenen String in Int werte umzuwandeln / zu parsen
- * und in Variablen zu speichern. Falls dies nicht klappt, z.b.wenn man zu wenig
- * Zahlen eingibt, kommt eine Fehlermeldung (Exception) die abgefangen wird und
- * die Methode von neu startet, sodass man eine neue Eingabe machen kann. Falls
- * alles soweit funktioniert hat und man auch das Schlüsselwort "covert" vor den
- * 3 Zahlen eingibt, werden die Zahlen überprüft ob sie zwischen 0 und 255
- * liegen, ansonsten gibt es wieder eine Fehlermeldung und die Methode startet
- * von neu, das man erneut den Befehl eingeben kann. Falls man den Befehl
- * korrekt eingibt, wird nun per Max Funktion der größte Wert ermittelt und in
- * der Variable w als double gespeichert. Dann rechnet man mit den Formeln die
- * Werte aus und speichert sie in double Variablen und rundet sie auf 4
- * Nachkommastellen mit Math.round, allerdings möchten wir ja auch die Nullen
- * nach dem Komma bis auf 4 Nachkommastellen angezeigt haben, also splittet man
- * die Werte die nun in den Variablen m c y k sind auf, indem man sie zuerst
- * einem String übergibt und anschließend mit regex beim Punkt in Strings in
- * einem Array splittet. Nun tut man den Teil nach dem Punkt, also beim 2.
- * String prüfen ob es 4 Stellen sind, wenn nicht, fügt man bis man 4 hat Nullen
- * hinten an den String hinzu, falls der String mehr als 4 Stellen hat, wird
- * alles nach der 4. Stelle "abgeschnitten" Anschließend gibt man die Strings
- * einzeln aus, also erster Teil(die Zahl vor dem komma), dann den Punkt als
- * Komma, da dieser ja nichtmehr da ist im String und dann den 2. Teil mit den
- * wenn nötig angefügten Nullen und man erhält das gewünschte Ausgabeformat.
- * Danach startet die Methode wieder von neu, sodass man einen neuen Wert
- * eingeben kann. Falls man irgendwas falsches als ersten Teil des Strings
- * eingibt, der vor dem Leerzeichen getrennt wird, erscheint auch eine
- * Fehlermeldung und die Methode startet erneut.
- *
- *
- */
- static boolean isRunning = true;
- public static void convert() {
- String rbg = Terminal.readLine();
- String[] command = rbg.split(" |\\;");
- if (command[0].equals("quit")) {
- isRunning = false;
- return;
- }
- try {
- r = Integer.parseInt(command[1]);
- g = Integer.parseInt(command[2]);
- b = Integer.parseInt(command[3]);
- } catch (Exception e) {
- Terminal.printError("Wrong input");
- return;
- }
- if ((command[0].equals("convert")) && r <= 255 && r >= 0 && g <= 255 && g >= 0 && b <= 255 && b >= 0) {
- double w = Math.max((r / 255d), Math.max((g / 255d), (b / 255d)));
- c = Math.round(((w - (r / 255d)) / w) * 10000) / 10000.0;
- m = Math.round(((w - (g / 255d)) / w) * 10000) / 10000.0;
- y = Math.round(((w - (b / 255d)) / w) * 10000) / 10000.0;
- k = Math.round((1 - w) * 10000) / 10000.0;
- String cyan = String.valueOf(c);
- String[] newCyan = cyan.split("\\.");
- int lenghtC = newCyan[1].length();
- if (lenghtC != 4) {
- for (int i = lenghtC; i < 4; i++)
- newCyan[1] += "0";
- }
- String magenta = String.valueOf(m);
- String[] newMagenta = magenta.split("\\.");
- int lenghtM = newMagenta[1].length();
- if (lenghtM != 4) {
- for (int i = lenghtM; i < 4; i++)
- newMagenta[1] += "0";
- }
- String yellow = String.valueOf(y);
- String[] newYellow = yellow.split("\\.");
- int lenghtY = newYellow[1].length();
- if (lenghtY != 4) {
- for (int i = lenghtY; i < 4; i++)
- newYellow[1] += "0";
- }
- String black = String.valueOf(k);
- String[] newBlack = black.split("\\.");
- int lenghtB = newBlack[1].length();
- if (lenghtB != 4) {
- for (int i = lenghtB; i < 4; i++)
- newBlack[1] += "0";
- }
- Terminal.printLine(newCyan[0] + "." + newCyan[1] + ";" + newYellow[0] + "." + newYellow[1] + ";"
- + newMagenta[0] + "." + newMagenta[1] + ";" + newBlack[0] + "." + newBlack[1]);
- } else {
- Terminal.printError("Wrong Input!");
- return;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement