Skip to content
Merged

Step5 #113

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion src/main/java/coordinate/CoordinateMain.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package coordinate;

import coordinate.domain.Coordinate;
import coordinate.domain.FigureFactory;
import coordinate.domain.Point;
import coordinate.dto.PointDtoFactory;
import coordinate.inputview.InputView;
Expand All @@ -19,7 +20,7 @@ public static void main(String[] args) {
coordinate.drawPoint(pointDtoFactory.getPointDTO());

ResultView resultView = new ResultView(coordinate.getCoordinatesAxis(), coordinate.getCoordinatePlane());
resultView.toDo(points);
resultView.toDisplay(FigureFactory.create(points).result());

} catch (IllegalArgumentException e) {
System.out.println(e.getMessage());
Expand Down
38 changes: 38 additions & 0 deletions src/main/java/coordinate/domain/AbstractFigure.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package coordinate.domain;

import java.util.ArrayList;
import java.util.HashSet;

public abstract class AbstractFigure implements Figure{
protected ArrayList<Point> points;

public AbstractFigure(ArrayList<Point> points) {
this.points = points;
}

private Boolean isSamePoint() {
HashSet<Point> isTrue = new HashSet<>(points);
return isTrue.size() == this.points.size();
}

public String result() {
if (this.points.size() < size()) {
return name() + "이 아닙니다.";
}
if (!isSamePoint()) {
throw new IllegalArgumentException("같은 점을 입력했습니다. " + name() + "이 아닙니다. 다시 입력해 주세요");
}
if (!isFigure()) {
throw new IllegalArgumentException(name() + "이 아닙니다. 다시 입력 해주세요");
}
return name()+ "의 면적은 " + area() + " 입니다.";
}

protected boolean isFigure() {
return true;
}

protected abstract String name();

protected abstract int size();
}
2 changes: 0 additions & 2 deletions src/main/java/coordinate/domain/Coordinate.java
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,6 @@ public void drawPoint(ArrayList<PointDTO> points) {
}
}



public ArrayList<CoordinateString> getCoordinatesAxis() {
return coordinatesAxis;
}
Expand Down
5 changes: 5 additions & 0 deletions src/main/java/coordinate/domain/Figure.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package coordinate.domain;

public interface Figure {
double area();
}
7 changes: 7 additions & 0 deletions src/main/java/coordinate/domain/FigureCreator.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package coordinate.domain;

import java.util.ArrayList;

public interface FigureCreator {
AbstractFigure create(ArrayList<Point> points);
}
19 changes: 19 additions & 0 deletions src/main/java/coordinate/domain/FigureFactory.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package coordinate.domain;

import java.util.ArrayList;
import java.util.HashMap;

public class FigureFactory {
private static HashMap<Integer, FigureCreator> whatFigure = new HashMap<>();
static {
whatFigure.put(2,new LineFactory());
whatFigure.put(3,new TriangleFactory());
whatFigure.put(4,new RectangleFactory());
}
public static AbstractFigure create(ArrayList<Point> points) {
if (!whatFigure.containsKey(points.size())) {
throw new IllegalArgumentException("도형이 아닙니다.");
}
return whatFigure.get(points.size()).create(points);
}
}
24 changes: 16 additions & 8 deletions src/main/java/coordinate/domain/Line.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,25 @@

import java.util.ArrayList;

public class Line {
private ArrayList<Point> points;
public class Line extends AbstractFigure {

public Line(ArrayList<Point> points) {
this.points = points;
super(points);
}
public String calculate() {
if (points.size() == 2) {
return "직선의 길이는 " + points.get(0).calculateLIne(points.get(1)) + " 입니다.";
}
return "직선이 아닙니다.";

@Override
protected String name() {
return "직선";
}

@Override
protected int size() {
return 2;
}

@Override
public double area() {
return points.get(0).calculateLIne(points.get(1));
}

}
10 changes: 10 additions & 0 deletions src/main/java/coordinate/domain/LineFactory.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package coordinate.domain;

import java.util.ArrayList;

public class LineFactory implements FigureCreator {
@Override
public AbstractFigure create(ArrayList<Point> points) {
return new Line(points);
}
}
37 changes: 21 additions & 16 deletions src/main/java/coordinate/domain/Rectangle.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,30 +3,18 @@
import java.util.ArrayList;
import java.util.HashSet;

public class Rectangle {
private ArrayList<Point> points;
public class Rectangle extends AbstractFigure {
private HashSet<Integer> base = new HashSet<>();
private HashSet<Integer> height = new HashSet<>();

public Rectangle(ArrayList<Point> points) {
this.points = points;
super(points);
for (Point point : this.points) {
this.base.add(point.getXPoint());
this.height.add(point.getYPoint());
}
}

public String calculate() {
if (this.points.size() < 4) {
return "사각형이 아닙니다.";
}
if (isRectangle().equals(false)) {
throw new IllegalArgumentException("사각형이 아닙니다.");
}
int[] a = findBaseHeight();
return "사각형의 면적은 " + (a[0] * a[1]) + " 입니다.";
}

private int[] findBaseHeight() {
int[] BaseAndHeight = new int[2];
for (int i = 1; i < points.size(); i++) {
Expand All @@ -40,7 +28,24 @@ private int[] findBaseHeight() {
return BaseAndHeight;
}

private Boolean isRectangle() {
return (this.base.size() == 2 && this.height.size() == 2);
@Override
protected boolean isFigure() {
return this.base.size() == 2 && this.height.size() == 2;
}

@Override
protected String name() {
return "사각형";
}

@Override
protected int size() {
return 4;
}

@Override
public double area() {
int[] a = findBaseHeight();
return a[0] * a[1];
}
}
10 changes: 10 additions & 0 deletions src/main/java/coordinate/domain/RectangleFactory.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package coordinate.domain;

import java.util.ArrayList;

public class RectangleFactory implements FigureCreator {
@Override
public AbstractFigure create(ArrayList<Point> points) {
return new Rectangle(points);
}
}
39 changes: 19 additions & 20 deletions src/main/java/coordinate/domain/Triangle.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,28 +2,10 @@

import java.util.ArrayList;

public class Triangle {
private ArrayList<Point> points;
public class Triangle extends AbstractFigure {

public Triangle(ArrayList<Point> points) {
this.points = points;
}

public String calculate() {
if (this.points.size() < 3) {
return "사각형이 아닙니다.";
}
if (isTriangle().equals(false)) {
throw new IllegalArgumentException("사각형이 아닙니다.");
}
double[] a = findLine();
double s = (a[0] + a[1] + a[2]) / 2;
double result = Math.sqrt(s * (s - a[0]) * (s - a[1]) * (s - a[2]));
return "삼각형의 면적은 " + result + " 입니다.";
}

private Boolean isTriangle() {
return true;
super(points);
}

private double[] findLine() {
Expand All @@ -33,4 +15,21 @@ private double[] findLine() {
}
return lines;
}

@Override
protected String name() {
return "삼각형";
}

@Override
protected int size() {
return 3;
}

@Override
public double area() {
double[] a = findLine();
double s = (a[0] + a[1] + a[2]) / 2;
return Math.sqrt(s * (s - a[0]) * (s - a[1]) * (s - a[2]));
}
}
10 changes: 10 additions & 0 deletions src/main/java/coordinate/domain/TriangleFactory.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package coordinate.domain;

import java.util.ArrayList;

public class TriangleFactory implements FigureCreator{
@Override
public AbstractFigure create(ArrayList<Point> points) {
return new Triangle(points);
}
}
21 changes: 7 additions & 14 deletions src/main/java/coordinate/resultview/ResultView.java
Original file line number Diff line number Diff line change
@@ -1,16 +1,11 @@
package coordinate.resultview;

import coordinate.domain.*;
import coordinate.domain.CoordinateYLine;
import coordinate.utils.CoordinateString;

import java.util.ArrayList;
import java.util.HashMap;

public class ResultView {
private static final int FOUR = 4;
private static final int T = 3;
private static final int TWO = 2;

private static final int MAXiMUM_NUM = 24;
private static final String DASH = "---";
private static final String PLUS = " +";
Expand All @@ -22,6 +17,7 @@ public class ResultView {
public ResultView(ArrayList<CoordinateString> coordinateAxis, ArrayList<CoordinateYLine> coordinatePlane) {
this.coordinateAxis = coordinateAxis;
this.coordinatePlane = coordinatePlane;

}

private void displayYCoordinate() {
Expand All @@ -44,16 +40,13 @@ private void displayXCoordinate() {
System.out.println();
}

public void toDo(ArrayList<Point> points) {
HashMap<Integer, String> toDo = new HashMap<>();
toDo.put(TWO, new Line(points).calculate());
toDo.put(FOUR, new Rectangle(points).calculate());
toDo.put(T, new Triangle(points).calculate());
displayTest();
System.out.println(toDo.get(points.size()));

public void toDisplay(String result) {
displayCoordinate();
System.out.println(result);
}

public void displayTest() {
public void displayCoordinate() {
displayYCoordinate();
displayXCoordinate();
}
Expand Down
Loading