Advertisement
Guest User

MINMAX; STACKED CANVAS

a guest
Nov 17th, 2017
490
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.67 KB | None | 0 0
  1. === MINMAX ===
  2.  
  3. Да се имплемнтира генеричка класа MinMax од два споредливи објекти (минимум/максимум). За класата да се имплементираат:
  4.  
  5. MinMax()-default конструктор
  6. void update(T element) - метод за ажурирање на тековните минимум/максимум.
  7. T max() - го враќа најголемиот елемент
  8. T min() - го враќа најмалиот елемент
  9. да се преоптовари методот toString() кој враќа стринг составен од минималниот и максималниот елемент и бројот на елементи обработени во методот update кои се различни од тековниот минимум/максимум, разделени со празно место.
  10. Во класата не смеат да се чуваат елементите кои се обработуваат во методот update, освен тековниот минимум/максимум.
  11.  
  12.  
  13. import java.util.Scanner;
  14. import java.io.*;
  15. import java.util.*;
  16.  
  17. class MinMax<E extends Comparable<E>>{
  18.     E maximum;
  19.     E minimum;
  20.     int countMax;
  21.     int countMin;
  22.     int counter;
  23.     public MinMax(){
  24.         maximum = null;
  25.         countMax = 0;
  26.         minimum = null;
  27.         countMin = 0;
  28.         counter = 0;
  29.     }
  30.     public void update(E el){
  31.         if(maximum == null&&minimum == null){
  32.             maximum = el;
  33.             minimum = el;
  34.             countMax++;
  35.             countMin++;
  36.             return;
  37.         }
  38.         if(maximum.equals(el) || minimum.equals(el)){
  39.             if(maximum.equals(el))
  40.                 countMax++;
  41.             else countMin++;
  42.             return;
  43.         }
  44.         if(el.compareTo(maximum) < 0 && el.compareTo(minimum) > 0){
  45.             counter++;
  46.             return;
  47.         }
  48.         if(el.compareTo(maximum) > 0){
  49.             if(!maximum.equals(minimum)){
  50.                 counter+=countMax;
  51.                 countMax = 1;
  52.             }
  53.             maximum = el;
  54.             return;
  55.         }
  56.         if(el.compareTo(minimum) < 0){
  57.             if(!maximum.equals(minimum)){
  58.                 counter+=countMin;
  59.                 countMin = 1;
  60.             }
  61.             minimum = el;
  62.             return;
  63.         }
  64.     }
  65.     public E max(){
  66.         return maximum;
  67.     }
  68.     public E min(){
  69.         return minimum;
  70.     }
  71.     public String toString(){
  72.         return minimum.toString()+" "+maximum.toString()+" "+counter+"\n";
  73.     }
  74. }
  75.  
  76. public class MinAndMax {
  77.     public static void main(String[] args) throws ClassNotFoundException {
  78.         Scanner scanner = new Scanner(System.in);
  79.         int n = scanner.nextInt();
  80.         MinMax<String> strings = new MinMax<String>();
  81.         for(int i = 0; i < n; ++i) {
  82.             String s = scanner.next();
  83.             strings.update(s);
  84.         }
  85.         System.out.println(strings);
  86.         MinMax<Integer> ints = new MinMax<Integer>();
  87.         for(int i = 0; i < n; ++i) {
  88.             int x = scanner.nextInt();
  89.             ints.update(x);
  90.         }
  91.         System.out.println(ints);
  92.     }
  93. }
  94.  
  95. === STACKED CANVAS ===
  96.  
  97. Да се имплементира класа Canvas на која ќе чуваат различни форми. За секоја форма се чува:
  98.  
  99. id:String
  100. color:Color (enum дадена)
  101. Притоа сите форми треба да имплментираат два интерфејси:
  102.  
  103. Scalable - дефиниран со еден метод void scale(float scaleFactor) за соодветно зголемување/намалување на формата за дадениот фактор
  104. Stackable - дефиниран со еден метод float weight() кој враќа тежината на формата (се пресметува како плоштина на соодветната форма)
  105. Во класата Canvas да се имплементираат следните методи:
  106.  
  107. void add(String id, Color color, float radius) за додавање круг
  108. void add(String id, Color color, float width, float height) за додавање правоаголник
  109. При додавањето на нова форма, во листата со форми таа треба да се смести на соодветното место според нејзината тежина. Елементите постојано се подредени според тежината во опаѓачки редослед.
  110.  
  111. void scale(String id, float scaleFactor) - метод кој ја скалира формата со даденото id за соодветниот scaleFactor. Притоа ако има потреба, треба да се изврши преместување на соодветните форми, за да се задржи подреденоста на елементите.
  112. Не смее да се користи сортирање на листата.
  113.  
  114. toString() - враќа стринг составен од сите фигури во нов ред. За секоја фигура се додава:
  115. C: [id:5 места од лево] [color:10 места од десно] [weight:10.2 места од десно] ако е круг
  116. R: [id:5 места од лево] [color:10 места од десно] [weight:10.2 места од десно] ако е правоаголник
  117. Користење на instanceof ќе се смета за неточно решение
  118.  
  119.  
  120. import java.util.Scanner;
  121. import java.util.*;
  122.  
  123. enum Color {
  124.     RED, GREEN, BLUE
  125. }
  126. public class ShapesTest {
  127.     public static void main(String[] args) {
  128.         Scanner scanner = new Scanner(System.in);
  129.         Canvas canvas = new Canvas();
  130.         while (scanner.hasNextLine()) {
  131.             String line = scanner.nextLine();
  132.             String[] parts = line.split(" ");
  133.             int type = Integer.parseInt(parts[0]);
  134.             String id = parts[1];
  135.             if (type == 1) {
  136.                 Color color = Color.valueOf(parts[2]);
  137.                 float radius = Float.parseFloat(parts[3]);
  138.                 canvas.add(id, color, radius);
  139.             } else if (type == 2) {
  140.                 Color color = Color.valueOf(parts[2]);
  141.                 float width = Float.parseFloat(parts[3]);
  142.                 float height = Float.parseFloat(parts[4]);
  143.                 canvas.add(id, color, width, height);
  144.             } else if (type == 3) {
  145.                 float scaleFactor = Float.parseFloat(parts[2]);
  146.                 System.out.println("ORIGNAL:");
  147.                 System.out.print(canvas);
  148.                 canvas.scale(id, scaleFactor);
  149.                 System.out.printf("AFTER SCALING: %s %.2f\n", id, scaleFactor);
  150.                 System.out.print(canvas);
  151.             }
  152.  
  153.         }
  154.     }
  155. }
  156.  
  157. class Canvas {
  158.     List<Form> forms;
  159.     public Canvas(){
  160.         forms = new ArrayList<Form>();
  161.     }
  162.     void add(String id, Color color, float radius){
  163.         Form ins = new Circle(id,color,radius);
  164.         this.addForm(ins);
  165.     }
  166.     void add(String id, Color color, float width, float height){
  167.         Form ins = new Rectangle(id,color,width, height);
  168.         this.addForm(ins);
  169.     }
  170.     void addForm(Form ins){
  171.         if(forms.size() == 0){
  172.             forms.add(ins);
  173.             return;
  174.         }
  175.         else{
  176.             for(int i = 0; i < forms.size(); i++){
  177.                 if( ins.weight() > forms.get(i).weight() ){
  178.                     forms.add(i, ins);
  179.                     return;
  180.                 }
  181.             }
  182.         }
  183.         forms.add(ins);
  184.     }
  185.     public void scale(String id, float scaleFactor){
  186.         for(int i = 0; i < forms.size(); i++){
  187.             if(forms.get(i).getId().equals(id)){
  188.                 Form move = forms.get(i);
  189.                 forms.remove(i);
  190.                 move.scale(scaleFactor);
  191.                 this.addForm(move);
  192.                 return;
  193.             }
  194.         }
  195.     }
  196.     public String toString(){
  197.         StringBuilder sb = new StringBuilder();
  198.         for (int i = 0; i < forms.size(); i++){
  199.             sb.append(forms.get(i).toString());
  200.         }
  201.         return sb.toString();
  202.     }
  203. }
  204. class Circle extends Form{
  205.     float radius;
  206.     public Circle(String _id, Color _color, float _radius){
  207.         super(_id, _color);
  208.         radius = _radius;
  209.     }
  210.     @Override
  211.     public float weight() {
  212.         return  (float) (radius*radius*Math.PI);
  213.     }
  214.     @Override
  215.     public void scale(float scaleFactor) {
  216.         radius = radius * scaleFactor;
  217.         //System.out.println("SCALE " + id +" " +radius);
  218.     }
  219.     public String toString(){
  220.         return String.format("C: %-5s%-10s%10.2f\n", id, color, weight());
  221.     }
  222. }
  223. class Rectangle extends Form{
  224.     float width;
  225.     float height;
  226.     public Rectangle(String _id, Color _color, float _width, float _height){
  227.         super(_id, _color);
  228.         width = _width;
  229.         height = _height;
  230.     }
  231.     @Override
  232.     public float weight() {
  233.         return width*height;
  234.     }
  235.     @Override
  236.     public void scale(float scaleFactor) {
  237.         width = width * scaleFactor;
  238.         height = height * scaleFactor;
  239.     }
  240.     public String toString(){
  241.         return String.format("R: %-5s%-10s%10.2f\n", id, color, weight());
  242.     }
  243. }
  244. abstract class Form implements Scalable, Stackable{
  245.     String id;
  246.     Color color;
  247.     public Form (String _id, Color _color){
  248.         id = _id;
  249.         color = _color;
  250.     }
  251.     public String getId(){
  252.         return id;
  253.     }
  254.     abstract public float weight();
  255.     abstract public void scale(float scaleFactor);
  256. }
  257. interface Scalable{
  258.     void scale(float scaleFactor);
  259. }
  260. interface Stackable{
  261.     float weight();
  262. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement