Skip to content
Merged
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
49 changes: 49 additions & 0 deletions src/main/java/coordinate/Coordinate.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package coordinate;

import coordinate.factory.*;
import java.util.*;

public class Coordinate {
private List<Point> points = new ArrayList<>();

public Coordinate(List<Integer> numbers) throws IllegalArgumentException {
for (int i = 0; i < numbers.size(); i++) {
if (i % 2 == 0)
points.add(new Point(numbers.get(i), numbers.get(i + 1)));
}
mismatchPointCount();
checkSameDot();
}

public String createFigure() throws IllegalArgumentException {
HashMap<Integer, FigureFactory> map = new HashMap<>();
map.put(2, new LineFactory());
map.put(3, new TriangleFactory());
map.put(4, new RectangleFactory());
return map.get(points.size()).create(points).outputMessage();
}

public void mismatchPointCount() {
if (points.size() < 2 || points.size() > 4)
throw new IllegalArgumentException("점의 개수는 2개혹은 3개 또는 4개 이어야 합니다.");
}

public void checkSameDot() throws IllegalArgumentException {
for (int i = 0; i < points.size(); i++) {
if (subCheckSameDot(i))
throw new IllegalArgumentException("위치가 같은 점(point)이 존재합니다. " + points.size() + " 개점의 위치는 달라야 합니다.");
}
}

private Boolean subCheckSameDot(int i) {
for (int j = i + 1; j < points.size(); j++) {
if (points.get(i).equals(points.get(j)))
return true;
}
return false;
}

public List<Point> getPoints() {
return points;
}
}
106 changes: 0 additions & 106 deletions src/main/java/coordinate/CoordinateLine.java

This file was deleted.

7 changes: 3 additions & 4 deletions src/main/java/coordinate/CoordinateMain.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,20 +9,19 @@ public static void main(String[] args) {
run();
break;
} catch (Exception e) {
continue;
System.out.println(e.getMessage());
}
}
}

public static void run() throws IllegalArgumentException {
List<Integer> numbers = InputView.extractNum(InputView.inputPoint());

CoordinateLine line = new CoordinateLine(numbers);
Coordinate line = new Coordinate(numbers);

PrintView.drawVertical(line.getPoints());
PrintView.drawRow();
PrintView.rowNumber();
PrintView.printWhatIs(numbers.size()/2);
System.out.print(line.judgeDotCount());
PrintView.printFigure(line.createFigure());
}
}
1 change: 0 additions & 1 deletion src/main/java/coordinate/InputView.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import java.util.*;

public class InputView {

public static String inputPoint() {
Scanner scan = new Scanner(System.in);
System.out.println("좌표를 입력하세요.");
Expand Down
34 changes: 29 additions & 5 deletions src/main/java/coordinate/Point.java
Original file line number Diff line number Diff line change
@@ -1,21 +1,45 @@
package coordinate;

import java.util.Objects;

public class Point {
private int x;
private int y;

public Point(int x, int y) throws IllegalArgumentException {
if (x < 0 || x > 24 || y < 0 || y > 24)
throw new IllegalArgumentException();
throw new IllegalArgumentException("x와 y값은 0초과 24미만 값이어야 합니다.");
this.x = x;
this.y = y;
}

public double calculatorLength(Point points) {
return Math.sqrt(Math.pow(this.x - points.x, 2) + Math.pow(this.y - points.y, 2));
public double calculatorLength(Point point) {
return Math.sqrt(Math.pow(this.x - point.x, 2) + Math.pow(this.y - point.y, 2));
}

public Boolean matchX(Point point) {
return this.x == point.x;
}

public Boolean matchY(Point point) {
return this.y == point.y;
}

public Boolean matchDot(int x, int y) {
return this.x * 3 == x && this.y == y;
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Point)) return false;
Point point = (Point) o;
return x == point.x &&
y == point.y;
}

public Boolean matchPoint(int x, int y) {
return this.x*3 == x && this.y == y;
@Override
public int hashCode() {
return Objects.hash(x, y);
}
}
35 changes: 7 additions & 28 deletions src/main/java/coordinate/PrintView.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ public class PrintView {
private static final String ROW = "───";
private static final String THREE_STRING = "%3s";
private static final String SIX_STRING = "%6s";
private static final String BLANK = " ";

public static void drawVertical(List<Point> points) {
for (int y = AXIS_MAX; y > 0; y--) {
Expand All @@ -23,16 +22,17 @@ public static void drawVertical(List<Point> points) {
}

private static void drawDotSpace(int y, List<Point> points) {
String blank = " ";
for (int x = 1; x <= AXIS_MAX * ROW.length(); x++) {
if (drawDot(y, points, x))
System.out.print(BLANK);
if (isDot(y, points, x))
System.out.print(blank);
}
}

private static Boolean drawDot(int y, List<Point> points, int x) {
private static Boolean isDot(int y, List<Point> points, int x) {
String dot = "●";
for (Point point : points) {
if (point.matchPoint(x, y)) {
if (point.matchDot(x, y)) {
System.out.print(dot);
return false;
}
Expand All @@ -57,28 +57,7 @@ public static void rowNumber() {
System.out.println();
}

public static void printLength() {
System.out.print("두 점 사이 거리는 ");
}

public static void printCube() {
System.out.print("사각형의 넓이는 ");
}

public static void printTriangle(){
System.out.print("삼각형의 넓이는 ");
}

public static void dotCountReWrite() {
System.out.print("직사각형이 아니거나 점의 개수는 2개혹은 4개 이어야 합니다.");
}

public static void printWhatIs(int count){
if(count==2)
printLength();
if(count==3)
printTriangle();
if (count==4)
printCube();
public static void printFigure(String figure){
System.out.println(figure);
}
}
10 changes: 10 additions & 0 deletions src/main/java/coordinate/factory/FigureFactory.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package coordinate.factory;

import coordinate.Point;
import coordinate.figure.Figure;

import java.util.List;

public interface FigureFactory {
Figure create(List<Point> points);
}
14 changes: 14 additions & 0 deletions src/main/java/coordinate/factory/LineFactory.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package coordinate.factory;

import coordinate.Point;
import coordinate.figure.Figure;
import coordinate.figure.Line;

import java.util.List;

public class LineFactory implements FigureFactory {
@Override
public Figure create(List<Point> points) {
return new Line(points);
}
}
14 changes: 14 additions & 0 deletions src/main/java/coordinate/factory/RectangleFactory.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package coordinate.factory;

import coordinate.Point;
import coordinate.figure.Figure;
import coordinate.figure.Rectangle;

import java.util.List;

public class RectangleFactory implements FigureFactory {
@Override
public Figure create(List<Point> points) {
return new Rectangle(points);
}
}
14 changes: 14 additions & 0 deletions src/main/java/coordinate/factory/TriangleFactory.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package coordinate.factory;

import coordinate.Point;
import coordinate.figure.Figure;
import coordinate.figure.Triangle;

import java.util.List;

public class TriangleFactory implements FigureFactory {
@Override
public Figure create(List<Point> points) {
return new Triangle(points);
}
}
25 changes: 25 additions & 0 deletions src/main/java/coordinate/figure/Figure.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package coordinate.figure;

import coordinate.Point;

import java.util.*;

public abstract class Figure implements FigureMessage , FigureProperty{
private List<Point> points;

public Figure(List<Point> points) {
this.points = points;
}

protected List<Double> eachLengthFromFirstPoint() {
List<Double> lengths = new ArrayList<>();
for (int i = 1; i < points.size(); ++i) {
lengths.add(points.get(0).calculatorLength(points.get(i)));
}
return lengths;
}

protected Point getPoints(int index) {
return points.get(index);
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이와 같이 전체 데이터를 공개하기 보다 다음과 같은 메소드면 충분하지 않을까?

protected Point getPoint(int index) {
    return points.get(index);
}

접근 제어자도 꼭 필요한 범위로 한정하도록 한다.

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

public interface FigureMessage {
String outputMessage();
}
6 changes: 6 additions & 0 deletions src/main/java/coordinate/figure/FigureProperty.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package coordinate.figure;

public interface FigureProperty {
double area();
String name();
}
Loading