Advertisement
Guest User

Untitled

a guest
May 22nd, 2019
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.90 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. }
  79.  
  80. if ((command[0].equals("convert")) && r <= 255 && r >= 0 && g <= 255 && g >= 0 && b <= 255 && b >= 0) {
  81.  
  82. double w = Math.max((r / 255d), Math.max((g / 255d), (b / 255d)));
  83.  
  84. c = Math.round(((w - (r / 255d)) / w) * 10000) / 10000.0;
  85. m = Math.round(((w - (g / 255d)) / w) * 10000) / 10000.0;
  86. y = Math.round(((w - (b / 255d)) / w) * 10000) / 10000.0;
  87. k = Math.round((1 - w) * 10000) / 10000.0;
  88.  
  89. String cyan = String.valueOf(c);
  90. String[] newCyan = cyan.split("\\.");
  91. int lenghtC = newCyan[1].length();
  92. if (lenghtC != 4) {
  93. for (int i = lenghtC; i < 4; i++)
  94. newCyan[1] += "0";
  95. }
  96.  
  97. String magenta = String.valueOf(m);
  98. String[] newMagenta = magenta.split("\\.");
  99. int lenghtM = newMagenta[1].length();
  100. if (lenghtM != 4) {
  101. for (int i = lenghtM; i < 4; i++)
  102. newMagenta[1] += "0";
  103. }
  104.  
  105. String yellow = String.valueOf(y);
  106. String[] newYellow = yellow.split("\\.");
  107. int lenghtY = newYellow[1].length();
  108. if (lenghtY != 4) {
  109. for (int i = lenghtY; i < 4; i++)
  110. newYellow[1] += "0";
  111. }
  112.  
  113. String black = String.valueOf(k);
  114. String[] newBlack = black.split("\\.");
  115. int lenghtB = newBlack[1].length();
  116. if (lenghtB != 4) {
  117. for (int i = lenghtB; i < 4; i++)
  118. newBlack[1] += "0";
  119. }
  120.  
  121. Terminal.printLine(newCyan[0] + "." + newCyan[1] + ";" + newYellow[0] + "." + newYellow[1] + ";"
  122. + newMagenta[0] + "." + newMagenta[1] + ";" + newBlack[0] + "." + newBlack[1]);
  123.  
  124. } else {
  125. Terminal.printError("Wrong Input!");
  126. }
  127. }
  128. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement