diff --git a/src/main/java/core/basesyntax/AbstractFigure.java b/src/main/java/core/basesyntax/AbstractFigure.java new file mode 100644 index 0000000000..e2e0fa2a31 --- /dev/null +++ b/src/main/java/core/basesyntax/AbstractFigure.java @@ -0,0 +1,13 @@ +package core.basesyntax; + +public abstract class AbstractFigure implements AreaMeasurable, Drawable { + protected String color; + + public AbstractFigure(String color) { + this.color = color; + } + + public String getColor() { + return color; + } +} diff --git a/src/main/java/core/basesyntax/AreaMeasurable.java b/src/main/java/core/basesyntax/AreaMeasurable.java new file mode 100644 index 0000000000..204c6b5948 --- /dev/null +++ b/src/main/java/core/basesyntax/AreaMeasurable.java @@ -0,0 +1,6 @@ +package core.basesyntax; + +public interface AreaMeasurable { + double getArea(); +} + diff --git a/src/main/java/core/basesyntax/Circle.java b/src/main/java/core/basesyntax/Circle.java new file mode 100644 index 0000000000..a59de8364a --- /dev/null +++ b/src/main/java/core/basesyntax/Circle.java @@ -0,0 +1,22 @@ +package core.basesyntax; + +public class Circle extends AbstractFigure { + private final double radius; + + public Circle(String color, double radius) { + super(color); + this.radius = radius; + } + + @Override + public double getArea() { + return Math.PI * radius * radius; + } + + @Override + public void draw() { + System.out.println("Figure: circle, area: " + getArea() + + " aq. units, radius: " + radius + + " units, color: " + getColor()); + } +} diff --git a/src/main/java/core/basesyntax/ColorSupplier.java b/src/main/java/core/basesyntax/ColorSupplier.java new file mode 100644 index 0000000000..75701c52d4 --- /dev/null +++ b/src/main/java/core/basesyntax/ColorSupplier.java @@ -0,0 +1,13 @@ +package core.basesyntax; + +import java.util.Random; + +public class ColorSupplier { + private static final String[] COLORS = {"red", "blue", "green", "yellow", "black"}; + + public String getRandomColor() { + Random random = new Random(); + int index = random.nextInt(COLORS.length); + return COLORS[index]; + } +} diff --git a/src/main/java/core/basesyntax/Drawable.java b/src/main/java/core/basesyntax/Drawable.java new file mode 100644 index 0000000000..d045270178 --- /dev/null +++ b/src/main/java/core/basesyntax/Drawable.java @@ -0,0 +1,5 @@ +package core.basesyntax; + +public interface Drawable { + void draw(); +} diff --git a/src/main/java/core/basesyntax/FigureSupplier.java b/src/main/java/core/basesyntax/FigureSupplier.java new file mode 100644 index 0000000000..ac8f59c3e3 --- /dev/null +++ b/src/main/java/core/basesyntax/FigureSupplier.java @@ -0,0 +1,36 @@ +package core.basesyntax; + +import java.util.Random; + +public class FigureSupplier { + private static final int FIGURE_COUNT = 5; + private static final int MAX_SIZE = 10; + private final Random random = new Random(); + private final ColorSupplier colorSupplier = new ColorSupplier(); + + // Змінено тип повернення на AbstractFigure + public AbstractFigure getRandomFigure() { + int figureType = random.nextInt(FIGURE_COUNT); + String color = colorSupplier.getRandomColor(); + + return switch (figureType) { + case 0 -> new Square(color, random.nextInt(MAX_SIZE) + 1); + case 1 -> new Rectangle(color, + random.nextInt(MAX_SIZE) + 1, random.nextInt(MAX_SIZE) + 1); + case 2 -> new RightTriangle(color, + random.nextInt(MAX_SIZE) + 1, random.nextInt(MAX_SIZE) + 1); + case 3 -> new Circle(color, random.nextInt(MAX_SIZE) + 1); + case 4 -> new IsoscelesTrapezoid(color, + random.nextInt(MAX_SIZE) + 1, + random.nextInt(MAX_SIZE) + 1, + random.nextInt(MAX_SIZE) + 1); + default -> getDefaultFigure(); + }; + } + + // і тут теж + public AbstractFigure getDefaultFigure() { + return new Circle("white", 10); + } +} + diff --git a/src/main/java/core/basesyntax/HelloWorld.java b/src/main/java/core/basesyntax/HelloWorld.java index 97db782bf7..03939c5b02 100644 --- a/src/main/java/core/basesyntax/HelloWorld.java +++ b/src/main/java/core/basesyntax/HelloWorld.java @@ -3,6 +3,23 @@ /** * Feel free to remove this class and create your own. */ + public class HelloWorld { + public static void main(String[] args) { + FigureSupplier figureSupplier = new FigureSupplier(); + AbstractFigure[] figures = new AbstractFigure[6]; // тут AbstractFigure + + for (int i = 0; i < figures.length / 2; i++) { + figures[i] = figureSupplier.getRandomFigure(); + } + for (int i = figures.length / 2; i < figures.length; i++) { + figures[i] = figureSupplier.getDefaultFigure(); + } + + for (AbstractFigure figure : figures) { + figure.draw(); // draw() є в AbstractFigure через Drawable + } + } } + diff --git a/src/main/java/core/basesyntax/IsoscelesTrapezoid.java b/src/main/java/core/basesyntax/IsoscelesTrapezoid.java new file mode 100644 index 0000000000..74c2933ba8 --- /dev/null +++ b/src/main/java/core/basesyntax/IsoscelesTrapezoid.java @@ -0,0 +1,28 @@ +package core.basesyntax; + +public class IsoscelesTrapezoid extends AbstractFigure { + private final double base1; + private final double base2; + private final double height; + + public IsoscelesTrapezoid(String color, double base1, double base2, double height) { + super(color); + this.base1 = base1; + this.base2 = base2; + this.height = height; + } + + @Override + public double getArea() { + return (base1 + base2) / 2 * height; + } + + @Override + public void draw() { + System.out.println("Figure: isoscelesTrapezoid, area: " + getArea() + + " sq. units, base1: " + base1 + + " units, base2: " + base2 + + " units, height: " + height + + " units, color: " + getColor()); + } +} diff --git a/src/main/java/core/basesyntax/Rectangle.java b/src/main/java/core/basesyntax/Rectangle.java new file mode 100644 index 0000000000..d371ef75cf --- /dev/null +++ b/src/main/java/core/basesyntax/Rectangle.java @@ -0,0 +1,25 @@ +package core.basesyntax; + +public class Rectangle extends AbstractFigure { + private final double width; + private final double height; + + public Rectangle(String color, double width, double height) { + super(color); + this.width = width; + this.height = height; + } + + @Override + public double getArea() { + return width * height; + } + + @Override + public void draw() { + System.out.println("Figure: rectangle, area: " + getArea() + + " sq. units, width: " + width + + " units, height: " + height + + " units, color: " + getColor()); + } +} diff --git a/src/main/java/core/basesyntax/RightTriangle.java b/src/main/java/core/basesyntax/RightTriangle.java new file mode 100644 index 0000000000..057472c889 --- /dev/null +++ b/src/main/java/core/basesyntax/RightTriangle.java @@ -0,0 +1,25 @@ +package core.basesyntax; + +public class RightTriangle extends AbstractFigure { + private final double firstLeg; + private final double secondLeg; + + public RightTriangle(String color, double firstLeg, double secondLeg) { + super(color); + this.firstLeg = firstLeg; + this.secondLeg = secondLeg; + } + + @Override + public double getArea() { + return (firstLeg * secondLeg) / 2; + } + + @Override + public void draw() { + System.out.println("Figure: rightTriangle, area: " + getArea() + + " sq. units, firstLeg: " + firstLeg + + " units, secondLeg: " + secondLeg + + " units, color: " + getColor()); + } +} diff --git a/src/main/java/core/basesyntax/Square.java b/src/main/java/core/basesyntax/Square.java new file mode 100644 index 0000000000..050b98c0bf --- /dev/null +++ b/src/main/java/core/basesyntax/Square.java @@ -0,0 +1,22 @@ +package core.basesyntax; + +public class Square extends AbstractFigure { + private final double side; + + public Square(String color, double side) { + super(color); + this.side = side; + } + + @Override + public double getArea() { + return side * side; + } + + @Override + public void draw() { + System.out.println("Figure: square, area: " + getArea() + + " sq. units, side: " + side + + " units, color: " + getColor()); + } +}