Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.*;
- import java.util.stream.Collectors;
- enum Color {
- RED, GREEN, BLUE
- }
- interface Scalable{
- void scale(float scaleFactor); //za zgolemuvanje na formata za dadeniot faktor
- }
- interface Stackable{
- float weight(); //tezina koja se presmetuva kako ploshtina
- }
- abstract class Shape implements Stackable, Scalable{
- protected String id;
- protected Color color;
- public Shape(String id, Color color) {
- this.id = id;
- this.color = color;
- }
- public String getId() {
- return id;
- }
- public Color getColor() {
- return color;
- }
- abstract String getType();
- }
- class Circle extends Shape{
- private float radius;
- public Circle(String id, Color color, float radius) {
- super(id, color);
- this.radius = radius;
- }
- @Override
- public void scale(float scaleFactor) {
- this.radius = radius*scaleFactor;
- }
- @Override
- public float weight() {
- return (float) (Math.PI*radius*radius);
- }
- @Override
- public String toString() {
- return String.format("C: %-5s%-10s%10.2f\n", id, color.toString(), weight());
- }
- @Override
- String getType() {
- return "Circle";
- }
- public float getRadius() {
- return radius;
- }
- }
- class Rectangle extends Shape{
- float width;
- float height;
- public Rectangle(String id, Color color, float width, float height) {
- super(id, color);
- this.width = width;
- this.height = height;
- }
- @Override
- public void scale(float scaleFactor) {
- this.height = height*scaleFactor;
- this.width = width*scaleFactor;
- }
- @Override
- public float weight() {
- return height*width;
- }
- @Override
- public String toString() {
- return String.format("R: %-5s%-10s%10.2f\n", id, color.toString(), weight());
- }
- @Override
- String getType() {
- return "Rectangle";
- }
- public float getWidth() {
- return width;
- }
- public float getHeight() {
- return height;
- }
- }
- class Canvas {
- List<Shape> shapes;
- public Canvas() {
- shapes = new ArrayList<>();
- }
- public void add(String id, Color color, float radius){
- shapes.add(new Circle(id,color,radius));
- shapes.sort(Comparator.comparing(Shape::weight).reversed());
- }
- public void add(String id, Color color, float width, float height){
- shapes.add(new Rectangle(id,color,width,height));
- shapes.sort(Comparator.comparing(Shape::weight).reversed());
- }
- public void scale(String id, float scaleFactor){
- shapes.stream().filter(shape -> shape.getId().equals(id)).forEach(shape -> shape.scale(scaleFactor));
- shapes.sort(Comparator.comparing(Shape::weight).reversed());
- }
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder();
- shapes.forEach(sb::append);
- return sb.toString();
- }
- }
- public class ShapesTest {
- public static void main(String[] args) {
- Scanner scanner = new Scanner(System.in);
- Canvas canvas = new Canvas();
- while (scanner.hasNextLine()) {
- String line = scanner.nextLine();
- String[] parts = line.split(" ");
- int type = Integer.parseInt(parts[0]);
- String id = parts[1];
- if (type == 1) {
- Color color = Color.valueOf(parts[2]);
- float radius = Float.parseFloat(parts[3]);
- canvas.add(id, color, radius);
- } else if (type == 2) {
- Color color = Color.valueOf(parts[2]);
- float width = Float.parseFloat(parts[3]);
- float height = Float.parseFloat(parts[4]);
- canvas.add(id, color, width, height);
- } else if (type == 3) {
- float scaleFactor = Float.parseFloat(parts[2]);
- System.out.println("ORIGNAL:");
- System.out.print(canvas);
- canvas.scale(id, scaleFactor);
- System.out.printf("AFTER SCALING: %s %.2f\n", id, scaleFactor);
- System.out.print(canvas);
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement