Advertisement
SashkoKlincharov

[Java][НП] - Генерички евалуатор

Aug 27th, 2021
239
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.61 KB | None | 0 0
  1.  
  2.  
  3. Да се дефинира генерички интерфејс IEvaluator којшто ќе има само еден метод:
  4.  
  5. boolean evaluate (Т a, Т b) - метод што ќе враќа true/false за некој тип на споредба помеѓу два објекти од иста класа што се споредливи.
  6.  
  7. Да се креира класа EvaluatorBuilder која што ќе има само еден генерички статички метод:
  8.  
  9. static IEvaluator build (String operator) - метод којшто ќе враќа објект што го имплементира интерфејсот IEvaluator. Имплементацијата на овие објекти треба да се базира врз основа на операторот којшто е даден како аргумент во функцијата. Истиот може да биде:
  10. >
  11. ==
  12. !=
  13. <
  14.  
  15. имплементациите на интерфејсот да бидат зададени со ламбда израз!
  16.  
  17. Да се дефинира класа Evaluator која што ќе има само еден генерички статички метод:
  18.  
  19. static boolean evaluateExpression (T left, T right, String operator) - метод којшто прима три аргументи: првите два се вредностите за евалуација, додека пак третиот е операторот со којшто се врши евалуацијата. Во овој метод да се креира соодветниот евалуатор на операторот, и да се евалуираат двете вредностleft и right.
  20.  
  21.  
  22.  
  23.  
  24.  
  25. import java.util.Arrays;
  26. import java.util.Scanner;
  27. import java.util.stream.Collectors;
  28.  
  29.  
  30. interface IEvaluator<T extends Comparable<T>> {
  31. boolean evaluate(T a, T b);
  32. }
  33.  
  34. class EvaluatorBuilder {
  35. static <T extends Comparable<T>> IEvaluator<T> build(String operator) {
  36. switch (operator) {
  37. case ">":
  38. return (a,b) -> a.compareTo(b)>0;
  39. case "==":
  40. return (a,b) -> a.equals(b);
  41. case "!=":
  42. return (a,b) -> !a.equals(b);
  43. case "<":
  44. return (a,b) -> a.compareTo(b) < 0;
  45. default:
  46. return null;
  47. }
  48. }
  49. }
  50.  
  51. class Evaluator {
  52. static <T extends Comparable<T>> boolean evaluateExpression(T left, T right, String operator) {
  53. IEvaluator<T> iEvaluator = EvaluatorBuilder.build(operator);
  54. return iEvaluator.evaluate(left,right);
  55. }
  56.  
  57. }
  58.  
  59.  
  60. public class EvaluatorTest {
  61.  
  62. private static class Student implements Comparable<Student> {
  63. String id;
  64. Double average;
  65. int year;
  66.  
  67. Student(String id, Double average, int year) {
  68. this.id = id;
  69. this.average = average;
  70. this.year = year;
  71. }
  72.  
  73. public static Student createInstance(String input) {
  74. String[] parts = input.split("\\s+");
  75. Double average = Double.parseDouble(parts[1]);
  76. int year = Integer.parseInt(parts[2]);
  77. return new Student(parts[0], average, year);
  78. }
  79.  
  80. @Override
  81. public int compareTo(Student student) {
  82. int compResult = Double.compare(this.average, student.average);
  83. if (compResult == 0)
  84. return Integer.compare(this.year, student.year);
  85. else
  86. return compResult;
  87. }
  88. }
  89.  
  90. public static void main(String[] args) {
  91.  
  92. Scanner sc = new Scanner(System.in);
  93.  
  94. while (sc.hasNext()) {
  95. String line = sc.nextLine();
  96. String[] parts = line.split("\\s+");
  97. String operator = parts[2];
  98.  
  99. if (parts[0].equals("1")) { //Integers
  100. Integer left = Integer.valueOf(parts[1]);
  101. Integer right = Integer.valueOf(parts[3]);
  102. System.out.println(Evaluator.evaluateExpression(left, right, operator));
  103.  
  104. } else if (parts[0].equals("2")) { //Double
  105. Double left = Double.valueOf(parts[1]);
  106. Double right = Double.valueOf(parts[3]);
  107. System.out.println(Evaluator.evaluateExpression(left, right, operator));
  108. } else if (parts[0].equals("3")) { //Characters
  109. Character left = parts[1].charAt(0);
  110. Character right = parts[3].charAt(0);
  111. System.out.println(Evaluator.evaluateExpression(left, right, operator));
  112. } else if (parts[0].equals("4")) { //String
  113. System.out.println(Evaluator.evaluateExpression(parts[1], parts[3], operator));
  114. } else { // Students
  115. operator = parts[3];
  116. String sInfo1 = Arrays.stream(parts).limit(3).collect(Collectors.joining(" "));
  117. String sInfo2 = Arrays.stream(parts).skip(4).limit(3).collect(Collectors.joining(" "));
  118. Student s1 = Student.createInstance(sInfo1);
  119. Student s2 = Student.createInstance(sInfo2);
  120. System.out.println(Evaluator.evaluateExpression(s1, s2, operator));
  121. }
  122. }
  123.  
  124. }
  125. }
  126.  
  127.  
  128.  
  129.  
  130. Sample input
  131.  
  132. 1 1 > 2
  133. 1 1 == 1
  134. 1 1 < 2
  135. 1 1 != 2
  136. 2 1.2 > 1.3
  137. 2 1.0 == 1.1
  138. 2 1.0 == 1
  139. 2 5.6667 > 5.6
  140. 2 7.8989 != 7
  141. 3 A == B
  142. 3 A == A
  143. 3 A == a
  144. 3 b > A
  145. 3 b > A
  146. 4 NP > VP
  147. 4 AA > BB
  148. 4 BB > AA
  149.  
  150. Sample output
  151.  
  152. false
  153. true
  154. true
  155. true
  156. false
  157. false
  158. true
  159. true
  160. true
  161. false
  162. true
  163. false
  164. true
  165. true
  166. false
  167. false
  168. true
  169.  
  170.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement