diff --git a/src/main/java/core/basesyntax/Application.java b/src/main/java/core/basesyntax/Application.java new file mode 100644 index 0000000000..0f5d5c7f6e --- /dev/null +++ b/src/main/java/core/basesyntax/Application.java @@ -0,0 +1,15 @@ +package core.basesyntax; + +public class Application { + public static void main(String[] args) { + FigureSupplier fs = new FigureSupplier(); + Figure[] figures = new Figure[Constant.NUMBER_OF_FIGURES_TO_CREATE]; + for (int i = 0; i < Constant.NUMBER_OF_FIGURES_TO_CREATE / 2; i++) { + figures[i] = fs.getRandomFigure(); + figures[i + Constant.NUMBER_OF_FIGURES_TO_CREATE / 2] = fs.getDefaultFigure(); + } + for (Figure figure : figures) { + figure.draw(); + } + } +} 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..e59a125122 --- /dev/null +++ b/src/main/java/core/basesyntax/Circle.java @@ -0,0 +1,22 @@ +package core.basesyntax; + +public class Circle extends Figure { + private double radius; + + public Circle(String color, double radius) { + super(color); + this.radius = radius; + area = getArea(); + } + + @Override + public double getArea() { + return Math.PI * radius * radius; + } + + @Override + public void draw() { + System.out.println("Figure: circle, area: " + area + " sq. units, radius: " + + radius + " units " + "color: " + color.toLowerCase()); + } +} diff --git a/src/main/java/core/basesyntax/ColorSupplier.java b/src/main/java/core/basesyntax/ColorSupplier.java new file mode 100644 index 0000000000..d477f43ac3 --- /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 static final Colors[] colors = Colors.values(); + private final Random rg = new Random(); + + public String getRandomColor() { + return colors[rg.nextInt(Constant.NUMBER_OF_COLORS)].name(); + } +} diff --git a/src/main/java/core/basesyntax/Colors.java b/src/main/java/core/basesyntax/Colors.java new file mode 100644 index 0000000000..9d09ef32f8 --- /dev/null +++ b/src/main/java/core/basesyntax/Colors.java @@ -0,0 +1,9 @@ +package core.basesyntax; + +public enum Colors { + WHITE, + BLACK, + RED, + GREEN, + BLUE +} diff --git a/src/main/java/core/basesyntax/Constant.java b/src/main/java/core/basesyntax/Constant.java new file mode 100644 index 0000000000..f79a48a5fb --- /dev/null +++ b/src/main/java/core/basesyntax/Constant.java @@ -0,0 +1,12 @@ +package core.basesyntax; + +public class Constant { + public static final int NUMBER_OF_COLORS = Colors.values().length; + public static final int NUMBER_OF_FIGURES = 5; + public static final int DIVISION_FOR_AREA = 2; + public static final int DEFAULT_CIRCLE_RADIUS = 10; + public static final int NUMBER_OF_FIGURES_TO_CREATE = 6; + public static final int MAX_DIMENSION = 10; + public static final int MIN_DIMENSION = 2; + public static final String DEFAULT_COLOR = "white"; +} diff --git a/src/main/java/core/basesyntax/Drawer.java b/src/main/java/core/basesyntax/Drawer.java new file mode 100644 index 0000000000..a9d764f713 --- /dev/null +++ b/src/main/java/core/basesyntax/Drawer.java @@ -0,0 +1,5 @@ +package core.basesyntax; + +public interface Drawer { + 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..e4e4a94dfc --- /dev/null +++ b/src/main/java/core/basesyntax/Figure.java @@ -0,0 +1,10 @@ +package core.basesyntax; + +public abstract class Figure implements Drawer, AreaCalculator { + protected String color; + protected double area; + + public Figure(String 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..560dbab054 --- /dev/null +++ b/src/main/java/core/basesyntax/FigureSupplier.java @@ -0,0 +1,41 @@ +package core.basesyntax; + +import java.util.Random; + +public class FigureSupplier { + private final Random rg = new Random(); + private final ColorSupplier cs = new ColorSupplier(); + + public Figure getRandomFigure() { + int randomNumber = rg.nextInt(Constant.NUMBER_OF_FIGURES); + String randomColor = cs.getRandomColor(); + double range = Constant.MAX_DIMENSION - Constant.MIN_DIMENSION; + double radius = Constant.MIN_DIMENSION + rg.nextDouble(range); + double width = Constant.MIN_DIMENSION + rg.nextDouble(range); + double height = Constant.MIN_DIMENSION + rg.nextDouble(range); + double firstLeg = Constant.MIN_DIMENSION + rg.nextDouble(range); + double secondLeg = Constant.MIN_DIMENSION + rg.nextDouble(range); + double top = Constant.MIN_DIMENSION + rg.nextDouble(range); + switch (randomNumber) { + case 0: { + return new Circle(randomColor, radius); + } + case 1: { + return new Rectangle(randomColor, width, height); + } + case 2: { + return new RightTriangle(randomColor, firstLeg, secondLeg); + } + case 3: { + return new Square(randomColor, width); + } + default: { + return new IsoscelesTrapezoid(randomColor,width, height, top); + } + } + } + + public Figure getDefaultFigure() { + return new Circle(Constant.DEFAULT_COLOR, Constant.DEFAULT_CIRCLE_RADIUS); + } +} diff --git a/src/main/java/core/basesyntax/FigureWithBottomAndHeight.java b/src/main/java/core/basesyntax/FigureWithBottomAndHeight.java new file mode 100644 index 0000000000..4d78002915 --- /dev/null +++ b/src/main/java/core/basesyntax/FigureWithBottomAndHeight.java @@ -0,0 +1,13 @@ +package core.basesyntax; + +public abstract class FigureWithBottomAndHeight extends Figure { + protected double width; + protected double height; + + public FigureWithBottomAndHeight(String color, double width, double height) { + super(color); + this.width = width; + this.height = height; + } + +} 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..5de437cf52 --- /dev/null +++ b/src/main/java/core/basesyntax/IsoscelesTrapezoid.java @@ -0,0 +1,23 @@ +package core.basesyntax; + +public class IsoscelesTrapezoid extends FigureWithBottomAndHeight { + private double top; + + public IsoscelesTrapezoid(String color, double bottom, double heigh, double top) { + super(color, bottom, heigh); + this.top = top; + area = getArea(); + } + + @Override + public double getArea() { + return (width + top) * height / Constant.DIVISION_FOR_AREA; + } + + @Override + public void draw() { + System.out.println("Figure: isosceles trapezoid, area: " + area + " sq. units, width: " + + width + " units, height: " + height + " top: " + top + " color: " + + color.toLowerCase()); + } +} diff --git a/src/main/java/core/basesyntax/Rectangle.java b/src/main/java/core/basesyntax/Rectangle.java new file mode 100644 index 0000000000..d366423d44 --- /dev/null +++ b/src/main/java/core/basesyntax/Rectangle.java @@ -0,0 +1,20 @@ +package core.basesyntax; + +public class Rectangle extends FigureWithBottomAndHeight { + + public Rectangle(String color, double bottom, double heigh) { + super(color, bottom, heigh); + area = getArea(); + } + + @Override + public double getArea() { + return width * height; + } + + @Override + public void draw() { + System.out.println("Figure: rectangle, area: " + area + " sq. units, width: " + + width + " units, height: " + height + " color: " + color.toLowerCase()); + } +} diff --git a/src/main/java/core/basesyntax/RightTriangle.java b/src/main/java/core/basesyntax/RightTriangle.java new file mode 100644 index 0000000000..980e36db86 --- /dev/null +++ b/src/main/java/core/basesyntax/RightTriangle.java @@ -0,0 +1,24 @@ +package core.basesyntax; + +public class RightTriangle extends Figure { + private double firstLeg; + private double secondLeg; + + public RightTriangle(String color, double firstLeg, double secondLeg) { + super(color); + this.firstLeg = firstLeg; + this.secondLeg = secondLeg; + area = getArea(); + } + + @Override + public double getArea() { + return firstLeg * secondLeg / Constant.DIVISION_FOR_AREA; + } + + @Override + public void draw() { + System.out.println("Figure: right triangle, area: " + area + " sq. units, firstLeg: " + + firstLeg + " units, secondLeg: " + secondLeg + " color: " + color.toLowerCase()); + } +} diff --git a/src/main/java/core/basesyntax/Square.java b/src/main/java/core/basesyntax/Square.java new file mode 100644 index 0000000000..29faa04412 --- /dev/null +++ b/src/main/java/core/basesyntax/Square.java @@ -0,0 +1,22 @@ +package core.basesyntax; + +public class Square extends Figure { + private double side; + + public Square(String color, double side) { + super(color); + this.side = side; + area = getArea(); + } + + @Override + public double getArea() { + return side * side; + } + + @Override + public void draw() { + System.out.println("Figure: square, area: " + area + " sq. units, side: " + + side + " units, color: " + color.toLowerCase()); + } +}