diff --git a/src/main/java/core/basesyntax/AreaCalculator.java b/src/main/java/core/basesyntax/AreaCalculator.java new file mode 100644 index 0000000000..61ea1d760d --- /dev/null +++ b/src/main/java/core/basesyntax/AreaCalculator.java @@ -0,0 +1,5 @@ +package core.basesyntax; + +public interface AreaCalculator { + 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..d671426d73 --- /dev/null +++ b/src/main/java/core/basesyntax/Circle.java @@ -0,0 +1,24 @@ +package core.basesyntax; + +public class Circle extends Figure { + private int radius; + + public Circle(int radius, Color color) { + 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() + " sq. units, " + + "radius: " + radius + " units, " + + "color: " + this.getColor() + ); + } +} diff --git a/src/main/java/core/basesyntax/Color.java b/src/main/java/core/basesyntax/Color.java new file mode 100644 index 0000000000..af2ee7affb --- /dev/null +++ b/src/main/java/core/basesyntax/Color.java @@ -0,0 +1,12 @@ +package core.basesyntax; + +public enum Color { + RED, + ORANGE, + YELLOW, + GREEN, + BLUE, + INDIGO, + VIOLET, + WHITE, +} diff --git a/src/main/java/core/basesyntax/ColorSupplier.java b/src/main/java/core/basesyntax/ColorSupplier.java new file mode 100644 index 0000000000..459d42b706 --- /dev/null +++ b/src/main/java/core/basesyntax/ColorSupplier.java @@ -0,0 +1,12 @@ +package core.basesyntax; + +import java.util.Random; + +public class ColorSupplier { + private Random random = new Random(); + private Color[] colors = Color.values(); + + public Color getRandomColor() { + return colors[random.nextInt(colors.length)]; + } +} diff --git a/src/main/java/core/basesyntax/Drawable.java b/src/main/java/core/basesyntax/Drawable.java new file mode 100644 index 0000000000..13fe470ec9 --- /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/Figure.java b/src/main/java/core/basesyntax/Figure.java new file mode 100644 index 0000000000..27ebf5e324 --- /dev/null +++ b/src/main/java/core/basesyntax/Figure.java @@ -0,0 +1,17 @@ +package core.basesyntax; + +public abstract class Figure implements Drawable, AreaCalculator { + private Color color; + + public Figure(Color color) { + this.color = color; + } + + public Color getColor() { + return color; + } + + public void setColor(Color color) { + this.color = color; + } +} diff --git a/src/main/java/core/basesyntax/FigureSupplier.java b/src/main/java/core/basesyntax/FigureSupplier.java new file mode 100644 index 0000000000..6226b162f8 --- /dev/null +++ b/src/main/java/core/basesyntax/FigureSupplier.java @@ -0,0 +1,43 @@ +package core.basesyntax; + +import java.util.Random; + +public class FigureSupplier { + private static final int MAX_FIGURES_TYPES = 5; + private static final int SIZE_LIMIT = 5; + private static final int DEFAULT_CIRCLE_RADIUS = 10; + + private ColorSupplier colorSupplier = new ColorSupplier(); + private Random random = new Random(); + + private int getRandomSize() { + return random.nextInt(SIZE_LIMIT) + 1; + } + + public Figure getRandomFigure() { + Color randomColor = colorSupplier.getRandomColor(); + int sideA = getRandomSize(); + switch (random.nextInt(MAX_FIGURES_TYPES) + 1) { + case 1: + return new Circle(sideA, randomColor); + case 2: + return new Square(sideA, randomColor); + case 3: + int rectangleSideB = getRandomSize(); + return new Rectangle(sideA, rectangleSideB, randomColor); + case 4: + int triangleSideB = getRandomSize(); + return new RightTriangle(sideA, triangleSideB, randomColor); + case 5: + int trapezoidSideB = getRandomSize(); + int trapezoidHeight = getRandomSize(); + return new IsoscelesTrapezoid(sideA, trapezoidSideB, trapezoidHeight, randomColor); + default: + return getDefaultFigure(); + } + } + + public Figure getDefaultFigure() { + return new Circle(DEFAULT_CIRCLE_RADIUS, Color.WHITE); + } +} diff --git a/src/main/java/core/basesyntax/HelloWorld.java b/src/main/java/core/basesyntax/HelloWorld.java deleted file mode 100644 index 97db782bf7..0000000000 --- a/src/main/java/core/basesyntax/HelloWorld.java +++ /dev/null @@ -1,8 +0,0 @@ -package core.basesyntax; - -/** - * Feel free to remove this class and create your own. - */ -public class HelloWorld { - -} diff --git a/src/main/java/core/basesyntax/IsoscelesTrapezoid.java b/src/main/java/core/basesyntax/IsoscelesTrapezoid.java new file mode 100644 index 0000000000..2d346803a2 --- /dev/null +++ b/src/main/java/core/basesyntax/IsoscelesTrapezoid.java @@ -0,0 +1,29 @@ +package core.basesyntax; + +public class IsoscelesTrapezoid extends Figure { + private int sideA; + private int sideB; + private int height; + + public IsoscelesTrapezoid(int sideA, int sideB, int height, Color color) { + super(color); + this.sideA = sideA; + this.sideB = sideB; + this.height = height; + } + + @Override + public double getArea() { + return (double) ((sideA + sideB) * height) / 2; + } + + @Override + public void draw() { + System.out.println("Figure: isosceles trapezoid, " + + "area: " + getArea() + " sq. units, " + + "first side: " + sideA + " units, " + + "second side: " + sideB + " units, " + + "color: " + this.getColor() + ); + } +} diff --git a/src/main/java/core/basesyntax/Main.java b/src/main/java/core/basesyntax/Main.java new file mode 100644 index 0000000000..08f961dc27 --- /dev/null +++ b/src/main/java/core/basesyntax/Main.java @@ -0,0 +1,22 @@ +package core.basesyntax; + +public class Main { + private static final int MAIN_LOOP_COUNT = 10; + + public static void main(String[] args) { + Drawable[] figures = new Drawable[MAIN_LOOP_COUNT]; + FigureSupplier figureSupplier = new FigureSupplier(); + + for (int i = 0; i < figures.length; i++) { + if (i < figures.length / 2) { + figures[i] = figureSupplier.getDefaultFigure(); + } else { + figures[i] = figureSupplier.getRandomFigure(); + } + } + + for (Drawable figure : figures) { + figure.draw(); + } + } +} diff --git a/src/main/java/core/basesyntax/Rectangle.java b/src/main/java/core/basesyntax/Rectangle.java new file mode 100644 index 0000000000..68d742b332 --- /dev/null +++ b/src/main/java/core/basesyntax/Rectangle.java @@ -0,0 +1,27 @@ +package core.basesyntax; + +public class Rectangle extends Figure { + private int sideA; + private int sideB; + + public Rectangle(int sideA, int sideB, Color color) { + super(color); + this.sideA = sideA; + this.sideB = sideB; + } + + @Override + public double getArea() { + return sideA * sideB; + } + + @Override + public void draw() { + System.out.println("Figure: rectangle, " + + "area: " + getArea() + " sq. units, " + + "first side: " + sideA + " units, " + + "second side: " + sideB + " units, " + + "color: " + this.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..e311ec6de5 --- /dev/null +++ b/src/main/java/core/basesyntax/RightTriangle.java @@ -0,0 +1,27 @@ +package core.basesyntax; + +public class RightTriangle extends Figure { + private int firstLeg; + private int secondLeg; + + public RightTriangle(int firstLeg, int secondLeg, Color color) { + super(color); + this.firstLeg = firstLeg; + this.secondLeg = secondLeg; + } + + @Override + public double getArea() { + return (double) (firstLeg * secondLeg / 2); + } + + @Override + public void draw() { + System.out.println("Figure: right triangle, " + + "area: " + getArea() + " sq. units, " + + "first leg: " + firstLeg + " units, " + + "second leg: " + secondLeg + " units, " + + "color: " + this.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..a4dcbfbbc7 --- /dev/null +++ b/src/main/java/core/basesyntax/Square.java @@ -0,0 +1,24 @@ +package core.basesyntax; + +public class Square extends Figure { + private int sideA; + + public Square(int sideA, Color color) { + super(color); + this.sideA = sideA; + } + + @Override + public double getArea() { + return sideA * sideA; + } + + @Override + public void draw() { + System.out.println("Figure: square, " + + "area: " + getArea() + " sq. units, " + + "side: " + sideA + " units, " + + "color: " + this.getColor() + ); + } +}