Advertisement
popovstefan

[NP] Evaluator

Nov 14th, 2018
350
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.54 KB | None | 0 0
  1. Дадена е класата Applicant (кандидат за евалуација) со име, кредитен резултат (credit score), работен стаж (experience) и дали има криминално досие (criminal record). Исто така, даден е интерфејс за евалуација на кандидати Evaluator со еден метод boolean evaluate(Applicant applicant) и енумерација со следните видови на евалуатори:
  2.  
  3. Кандидатот ја поминува евалуацијата (методот враќа true) ако:
  4.  
  5. NO_CRIMINAL_RECORD - нема криминално досие
  6. MORE_EXPERIENCE - има барем 10 години работен стаж
  7. MORE_CREDIT_SCORE - има кредитен резултат од минимум 500
  8. NO_CRIMINAL_RECORD_AND_MORE_EXPERIENCE - нема криминално досие и има барем 10 години работен стаж
  9. MORE_EXPERIENCE_AND_MORE_CREDIT_SCORE - има барем 10 години работен стаж и има кредитен резултат од минимум 500
  10. NO_CRIMINAL_RECORD_AND_MORE_CREDIT_SCORE - нема криминално досие и има кредитен резултат од минимум 500.
  11. Ваша задача е да го имплементирате методот build(Evaluator.TYPE type) во класата EvaluatorBuilder, кој ќе враќа објект од соодветна имплементација на интерфејсот Evaluator за соодветниот тип на евалуација. Ако типот на евалуација не е некој од наведените, методот треба да фрли исклучок од тип InvalidEvaluation.
  12.  
  13. За добро дизајнирано решение (ќе биде објавено по завршувањето на испитот) ќе се добиваат бонус 10 поени.
  14.  
  15. Почетен код:
  16.  
  17. import java.util.Scanner;
  18.  
  19. public class ApplicantEvaluationTest {
  20.     public static void main(String[] args) {
  21.         Scanner scanner = new Scanner(System.in);
  22.         String name = scanner.nextLine();
  23.         int creditScore = scanner.nextInt();
  24.         int employmentYears = scanner.nextInt();
  25.         boolean hasCriminalRecord = scanner.nextBoolean();
  26.         int choice = scanner.nextInt();
  27.         Applicant applicant = new Applicant(name, creditScore, employmentYears, hasCriminalRecord);
  28.         Evaluator.TYPE type = Evaluator.TYPE.values()[choice];
  29.         Evaluator evaluator = null;
  30.         try {
  31.             evaluator = EvaluatorBuilder.build(type);
  32.             System.out.println("Applicant");
  33.             System.out.println(applicant);
  34.             System.out.println("Evaluation type: " + type.name());
  35.             if (evaluator.evaluate(applicant)) {
  36.                 System.out.println("Applicant is ACCEPTED");
  37.             } else {
  38.                 System.out.println("Applicant is REJECTED");
  39.             }
  40.         } catch (InvalidEvaluation invalidEvaluation) {
  41.             System.out.println("Invalid evaluation");
  42.         }
  43.     }
  44. }
  45.  
  46. class Applicant {
  47.     private String name;
  48.  
  49.     private int creditScore;
  50.     private int employmentYears;
  51.     private boolean hasCriminalRecord;
  52.  
  53.     public Applicant(String name, int creditScore, int employmentYears, boolean hasCriminalRecord) {
  54.         this.name = name;
  55.         this.creditScore = creditScore;
  56.         this.employmentYears = employmentYears;
  57.         this.hasCriminalRecord = hasCriminalRecord;
  58.     }
  59.  
  60.     public String getName() {
  61.         return name;
  62.     }
  63.  
  64.     public int getCreditScore() {
  65.         return creditScore;
  66.     }
  67.  
  68.     public int getEmploymentYears() {
  69.         return employmentYears;
  70.     }
  71.  
  72.     public boolean hasCriminalRecord() {
  73.         return hasCriminalRecord;
  74.     }
  75.  
  76.     @Override
  77.     public String toString() {
  78.         return String.format("Name: %s\nCredit score: %d\nExperience: %d\nCriminal record: %s\n",
  79.                 name, creditScore, employmentYears, hasCriminalRecord ? "Yes" : "No");
  80.     }
  81. }
  82.  
  83. interface Evaluator {
  84.     enum TYPE {
  85.         NO_CRIMINAL_RECORD,
  86.         MORE_EXPERIENCE,
  87.         MORE_CREDIT_SCORE,
  88.         NO_CRIMINAL_RECORD_AND_MORE_EXPERIENCE,
  89.         MORE_EXPERIENCE_AND_MORE_CREDIT_SCORE,
  90.         NO_CRIMINAL_RECORD_AND_MORE_CREDIT_SCORE,
  91.         INVALID // should throw exception
  92.     }
  93.  
  94.     boolean evaluate(Applicant applicant);
  95. }
  96.  
  97. class EvaluatorBuilder {
  98.     public static Evaluator build(Evaluator.TYPE type) throws InvalidEvaluation {
  99.        
  100.        
  101.     }
  102. }
  103.  
  104.  
  105. Решение (за бонус поени):
  106.  
  107.  
  108.  
  109. import java.util.Scanner;
  110.  
  111. public class ApplicantEvaluationTest {
  112.     public static void main (String [] args) {
  113.         Scanner scanner = new Scanner(System.in);
  114.         String name = scanner.nextLine();
  115.         int creditScore = scanner.nextInt();
  116.         int employmentYears = scanner.nextInt();
  117.         boolean hasCriminalRecord = scanner.nextBoolean();
  118.         int choice = scanner.nextInt();
  119.         Applicant applicant = new Applicant(name, creditScore, employmentYears, hasCriminalRecord);
  120.         Evaluator.TYPE type = Evaluator.TYPE.values()[choice];
  121.         Evaluator evaluator = null;
  122.         try {
  123.             evaluator = EvaluatorBuilder.build(type);
  124.             System.out.println("Applicant");
  125.             System.out.println(applicant);
  126.             System.out.println("Evaluation type: " + type.name());
  127.             if (evaluator.evaluate(applicant)) {
  128.                 System.out.println("Applicant is ACCEPTED");
  129.             } else {
  130.                 System.out.println("Applicant is REJECTED");
  131.             }
  132.         } catch (InvalidEvaluation invalidEvaluation) {
  133.             System.out.println("Invalid evaluation");
  134.         }
  135.     }
  136. }
  137.  
  138. class Applicant {
  139.     private String name;
  140.     private int creditScore;
  141.     private int employmentYears;
  142.     private boolean hasCriminalRecord;
  143.  
  144.     Applicant(String name, int creditScore, int employmentYears, boolean hasCriminalRecord) {
  145.         this.name = name;
  146.         this.creditScore = creditScore;
  147.         this.employmentYears = employmentYears;
  148.         this.hasCriminalRecord = hasCriminalRecord;
  149.     }
  150.  
  151.     public String getName() {
  152.         return name;
  153.     }
  154.  
  155.     int getCreditScore() {
  156.         return creditScore;
  157.     }
  158.  
  159.     int getEmploymentYears() {
  160.         return employmentYears;
  161.     }
  162.  
  163.     boolean hasCriminalRecord() {
  164.         return hasCriminalRecord;
  165.     }
  166.  
  167.     @Override
  168.     public String toString() {
  169.         return String.format("Name: %s\nCredit score: %d\nExperience: %d\nCriminal record: %s\n",
  170.                 name, creditScore, employmentYears, hasCriminalRecord ? "Yes" : "No");
  171.     }
  172. }
  173.  
  174. interface Evaluator {
  175.     enum TYPE {
  176.         NO_CRIMINAL_RECORD,
  177.         MORE_EXPERIENCE,
  178.         MORE_CREDIT_SCORE,
  179.         NO_CRIMINAL_RECORD_AND_MORE_EXPERIENCE,
  180.         MORE_EXPERIENCE_AND_MORE_CREDIT_SCORE,
  181.         NO_CRIMINAL_RECORD_AND_MORE_CREDIT_SCORE,
  182.         INVALID
  183.     }
  184.  
  185.     boolean evaluate(Applicant applicant);
  186. }
  187.  
  188. class InvalidEvaluation extends Exception { }
  189.  
  190. class EvaluatorBuilder {
  191.     static Evaluator build(Evaluator.TYPE type) throws InvalidEvaluation {
  192.         switch (type) {
  193.             case NO_CRIMINAL_RECORD: {
  194.                 return new CriminalRecord(null);
  195.             }
  196.             case MORE_EXPERIENCE: {
  197.                 return new Experience(null);
  198.             }
  199.             case MORE_CREDIT_SCORE: {
  200.                 return new CreditScore(null);
  201.             }
  202.             case NO_CRIMINAL_RECORD_AND_MORE_EXPERIENCE: {
  203.                 return new CriminalRecord(new Experience(null));
  204.             }
  205.             case NO_CRIMINAL_RECORD_AND_MORE_CREDIT_SCORE: {
  206.                 return new CriminalRecord(new CreditScore(null));
  207.             }
  208.             case MORE_EXPERIENCE_AND_MORE_CREDIT_SCORE: {
  209.                 return new Experience(new CreditScore(null));
  210.             }
  211.             default:
  212.                 throw new InvalidEvaluation();
  213.         }
  214.     }
  215. }
  216.  
  217. abstract class ChainEvaluator implements Evaluator {
  218.     private final Evaluator next;
  219.  
  220.     ChainEvaluator(Evaluator next) {
  221.         this.next = next;
  222.     }
  223.  
  224.     boolean hasNext() {
  225.         return next != null;
  226.     }
  227.  
  228.     @Override
  229.     public boolean evaluate(Applicant applicant) {
  230.         return next.evaluate(applicant);
  231.     }
  232. }
  233.  
  234. class CriminalRecord extends ChainEvaluator {
  235.  
  236.     CriminalRecord(Evaluator next) {
  237.         super(next);
  238.     }
  239.  
  240.     @Override
  241.     public boolean evaluate(Applicant applicant) {
  242.         if (applicant.hasCriminalRecord())
  243.             return false;
  244.         else if (this.hasNext())
  245.             return super.evaluate(applicant);
  246.         else
  247.             return true;
  248.     }
  249. }
  250.  
  251. class Experience extends ChainEvaluator {
  252.  
  253.     Experience(Evaluator next) {
  254.         super(next);
  255.     }
  256.  
  257.     @Override
  258.     public boolean evaluate(Applicant applicant) {
  259.         if (applicant.getEmploymentYears() < 10)
  260.             return false;
  261.         else if (this.hasNext())
  262.             return super.evaluate(applicant);
  263.         else
  264.             return true;
  265.     }
  266. }
  267.  
  268. class CreditScore extends ChainEvaluator {
  269.  
  270.     CreditScore(Evaluator next) {
  271.         super(next);
  272.     }
  273.  
  274.     @Override
  275.     public boolean evaluate(Applicant applicant) {
  276.         if (applicant.getCreditScore() < 500)
  277.             return false;
  278.         else if (this.hasNext())
  279.             return super.evaluate(applicant);
  280.         else
  281.             return true;
  282.     }
  283. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement