Advertisement
Guest User

Untitled

a guest
May 22nd, 2019
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.92 KB | None | 0 0
  1. package edu.kit.informatik;
  2.  
  3. /**
  4. * @author Nico Krüger
  5. */
  6.  
  7. public class Converter {
  8.  
  9. /**
  10. * benötigten Variablen erstellt, diese privat und static gesetzt, damit man
  11. * nicht von außen darauf zugreifen kann und man kein objekt benötigt um die
  12. * Methode auszuführen.
  13. */
  14. private static int r;
  15. private static int g;
  16. private static int b;
  17.  
  18. private static double c;
  19. private static double m;
  20. private static double y;
  21. private static double k;
  22.  
  23. /**
  24. * Methode, die erst den String einliest, den der Benutzer über das Terminal
  25. * eingibt, diesen dann mithilfe von regex in einen String Array aufsplittet in
  26. * 4 Teile, separiert von Leerzeichen und Semikolon. Die while schleife fängt
  27. * automatisch an, da isRunning beim starten des Programms mit true
  28. * initialisiert wird. Falls man nun als ersten Teil des Strings "quit" eingibt,
  29. * beendet das Programm wie gewünscht. Falls nicht versucht das Programm, den
  30. * 2,3 und 4. Teil vom eingegebenen String in Int werte umzuwandeln / zu parsen
  31. * und in Variablen zu speichern. Falls dies nicht klappt, z.b.wenn man zu wenig
  32. * Zahlen eingibt, kommt eine Fehlermeldung (Exception) die abgefangen wird und
  33. * die Methode von neu startet, sodass man eine neue Eingabe machen kann. Falls
  34. * alles soweit funktioniert hat und man auch das Schlüsselwort "covert" vor den
  35. * 3 Zahlen eingibt, werden die Zahlen überprüft ob sie zwischen 0 und 255
  36. * liegen, ansonsten gibt es wieder eine Fehlermeldung und die Methode startet
  37. * von neu, das man erneut den Befehl eingeben kann. Falls man den Befehl
  38. * korrekt eingibt, wird nun per Max Funktion der größte Wert ermittelt und in
  39. * der Variable w als double gespeichert. Dann rechnet man mit den Formeln die
  40. * Werte aus und speichert sie in double Variablen und rundet sie auf 4
  41. * Nachkommastellen mit Math.round, allerdings möchten wir ja auch die Nullen
  42. * nach dem Komma bis auf 4 Nachkommastellen angezeigt haben, also splittet man
  43. * die Werte die nun in den Variablen m c y k sind auf, indem man sie zuerst
  44. * einem String übergibt und anschließend mit regex beim Punkt in Strings in
  45. * einem Array splittet. Nun tut man den Teil nach dem Punkt, also beim 2.
  46. * String prüfen ob es 4 Stellen sind, wenn nicht, fügt man bis man 4 hat Nullen
  47. * hinten an den String hinzu, falls der String mehr als 4 Stellen hat, wird
  48. * alles nach der 4. Stelle "abgeschnitten" Anschließend gibt man die Strings
  49. * einzeln aus, also erster Teil(die Zahl vor dem komma), dann den Punkt als
  50. * Komma, da dieser ja nichtmehr da ist im String und dann den 2. Teil mit den
  51. * wenn nötig angefügten Nullen und man erhält das gewünschte Ausgabeformat.
  52. * Danach startet die Methode wieder von neu, sodass man einen neuen Wert
  53. * eingeben kann. Falls man irgendwas falsches als ersten Teil des Strings
  54. * eingibt, der vor dem Leerzeichen getrennt wird, erscheint auch eine
  55. * Fehlermeldung und die Methode startet erneut.
  56. *
  57. *
  58. */
  59.  
  60. static boolean isRunning = true;
  61.  
  62. public static void convert() {
  63.  
  64. String rbg = Terminal.readLine();
  65. String[] command = rbg.split(" |\\;");
  66.  
  67. if (command[0].equals("quit")) {
  68. isRunning = false;
  69. return;
  70. }
  71.  
  72. try {
  73. r = Integer.parseInt(command[1]);
  74. g = Integer.parseInt(command[2]);
  75. b = Integer.parseInt(command[3]);
  76. } catch (Exception e) {
  77. Terminal.printError("Wrong input");
  78. return;
  79. }
  80.  
  81. if ((command[0].equals("convert")) && r <= 255 && r >= 0 && g <= 255 && g >= 0 && b <= 255 && b >= 0) {
  82.  
  83. double w = Math.max((r / 255d), Math.max((g / 255d), (b / 255d)));
  84.  
  85. c = Math.round(((w - (r / 255d)) / w) * 10000) / 10000.0;
  86. m = Math.round(((w - (g / 255d)) / w) * 10000) / 10000.0;
  87. y = Math.round(((w - (b / 255d)) / w) * 10000) / 10000.0;
  88. k = Math.round((1 - w) * 10000) / 10000.0;
  89.  
  90. String cyan = String.valueOf(c);
  91. String[] newCyan = cyan.split("\\.");
  92. int lenghtC = newCyan[1].length();
  93. if (lenghtC != 4) {
  94. for (int i = lenghtC; i < 4; i++)
  95. newCyan[1] += "0";
  96. }
  97.  
  98. String magenta = String.valueOf(m);
  99. String[] newMagenta = magenta.split("\\.");
  100. int lenghtM = newMagenta[1].length();
  101. if (lenghtM != 4) {
  102. for (int i = lenghtM; i < 4; i++)
  103. newMagenta[1] += "0";
  104. }
  105.  
  106. String yellow = String.valueOf(y);
  107. String[] newYellow = yellow.split("\\.");
  108. int lenghtY = newYellow[1].length();
  109. if (lenghtY != 4) {
  110. for (int i = lenghtY; i < 4; i++)
  111. newYellow[1] += "0";
  112. }
  113.  
  114. String black = String.valueOf(k);
  115. String[] newBlack = black.split("\\.");
  116. int lenghtB = newBlack[1].length();
  117. if (lenghtB != 4) {
  118. for (int i = lenghtB; i < 4; i++)
  119. newBlack[1] += "0";
  120. }
  121.  
  122. Terminal.printLine(newCyan[0] + "." + newCyan[1] + ";" + newYellow[0] + "." + newYellow[1] + ";"
  123. + newMagenta[0] + "." + newMagenta[1] + ";" + newBlack[0] + "." + newBlack[1]);
  124.  
  125. } else {
  126. Terminal.printError("Wrong Input!");
  127. return;
  128. }
  129. }
  130. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement