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
28 changes: 23 additions & 5 deletions src/main/java/MainCoordinate.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,27 @@
import static View.CoordinateView.drawXLine;
import static View.CoordinateView.drawYLine;
import domain.Line;
import util.Parser;
import domain.Point;
import domain.MakingPoints;

import java.util.List;

import static view.InputView.getCoordinateValue;
import static view.ResultView.printCoordinate;
import static view.ResultView.printLineLength;

public class MainCoordinate {
public static void main(String[] args) {
drawYLine();
drawXLine();
start();
}

private static void start() {
try {
List<Point> pointList = MakingPoints.makePoints(Parser.makePosition(getCoordinateValue()));
printCoordinate(pointList);
printLineLength(new Line().getLength(pointList));
} catch (Exception e) {
System.out.println("좌표값을 잘못 입력했습니다. 다시 입력하세요.");
start();
}
}
}
}
40 changes: 0 additions & 40 deletions src/main/java/View/CoordinateView.java

This file was deleted.

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

import java.util.List;

public class Line {
static final int FIRST_POINT = 0;
static final int SECOND_POINT = 1;

public double getLength(List<Point> points) {
return points.get(FIRST_POINT).calculateLength(points.get(SECOND_POINT));
}
}
17 changes: 17 additions & 0 deletions src/main/java/domain/MakingPoints.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package domain;

import java.util.ArrayList;
import java.util.List;

public class MakingPoints {
static final int X_POSITION = 0;
static final int Y_POSITION = 1;

public static List<Point> makePoints(List<Integer[]> posIntegerList) {
List<Point> pointList = new ArrayList<>();
for (int i = 0; i < posIntegerList.size(); i++) {
pointList.add(new Point(posIntegerList.get(i)[X_POSITION], posIntegerList.get(i)[Y_POSITION]));
}
return pointList;
}
}
37 changes: 37 additions & 0 deletions src/main/java/domain/Point.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package domain;

public class Point {
static final int LINE_SIZE = 51;
static final int MAX_POINT_VALUE = 24;
static final int UNIT_DIGIT_RANGE = 10;
static final int TWO = 2;
static final int ONE = 1;

private int xPos;
private int yPos;

public Point(int xPos, int yPos) {
if (xPos > MAX_POINT_VALUE || xPos < 0) throw new IllegalArgumentException();
this.xPos = xPos;
if (yPos > MAX_POINT_VALUE || yPos < 0) throw new IllegalArgumentException();
this.yPos = yPos;
}

public int subtractXPoint(Point p) {
return xPos - p.xPos;
}

public int subtractYPoint(Point p) {
return yPos - p.yPos;
}

public int findPointPosition() {
int index = (MAX_POINT_VALUE - yPos) * LINE_SIZE + (xPos * TWO) + ONE;
if (xPos < UNIT_DIGIT_RANGE) index += 1;
return index;
}

public double calculateLength(Point p) {
return Math.sqrt(Math.pow(this.subtractXPoint(p), 2) + Math.pow(this.subtractYPoint(p), 2));
}
}
45 changes: 45 additions & 0 deletions src/main/java/util/Parser.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package util;

import java.util.ArrayList;
import java.util.List;

public class Parser {

private static String[] splitHyphen(String input) {
return input.split("-");
}

private static String[] removeBracket(String[] str) {
String[] temp = new String[str.length];
for (int i = 0; i < str.length; i++) {
temp[i] = str[i].substring(1, str[i].length() - 1); //"a,b","c,d"
}
return temp;
}

private static String[] splitComma(String str) {
return str.split(",");
}

private static Integer[] stringToInteger(String[] str) {
Integer[] pos = new Integer[2];
for (int i = 0; i < str.length; i++) {
pos[i] = Integer.parseInt(str[i]);
}
return pos;
}

private static List<Integer[]> makePostionList(String[] temp) {
List<Integer[]> pos = new ArrayList<>();
for (String t : temp) {
pos.add(stringToInteger(splitComma(t))); //a,b,c,d
}
return pos;
}

public static List<Integer[]> makePosition(String input) {
String[] str = splitHyphen(input); //"(a,b)","(c,d)"
String[] temp = removeBracket(str); //"a,b","c,d"
return makePostionList(temp);
}
}
59 changes: 59 additions & 0 deletions src/main/java/view/CoordinateView.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package view;

public class CoordinateView {
static final String VERTICAL_LINE = "│";
static final String HORIZONTAL_LINE = "──";
static final String CROSS = "+";
static final String BLANK = " ";
static final String ZERO = "0";
static final int LENGTH = 24;
private StringBuilder sb = new StringBuilder();

private void drawRow() {
for (int i = LENGTH; i > 0; i--) {
drawRowValue(i);
}
}

private void drawRowValue(int index) {
if (index % 2 != 0) {
sb.append(String.format("%2s", BLANK) + VERTICAL_LINE + String.format("%47s", BLANK) + '\n');
return;
}
sb.append(String.format("%2s", index) + VERTICAL_LINE + String.format("%47s", BLANK) + '\n');
}

private void drawXLine() {
sb.append(String.format("%3s", CROSS));
for (int i = 0; i < LENGTH; i++) {
sb.append(HORIZONTAL_LINE);
}
sb.append('\n');
drawXLineNum();
}

private void drawXLineNum() {
sb.append(String.format("%2s", ZERO) + BLANK);
for (int i = 1; i <= LENGTH; i++) {
if (i % 2 == 1) {
sb.append(String.format("%2s", BLANK));
}
if (i % 2 == 0) {
sb.append(String.format("%2s", i));
}
}
}

public void drawDot(int position) {
sb.setCharAt(position, '●');
}

public void makeCoordinate() {
drawRow();
drawXLine();
}

public StringBuilder getCoordinateSb() {
return sb;
}
}
12 changes: 12 additions & 0 deletions src/main/java/view/InputView.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package view;

import java.util.Scanner;

public class InputView {
static Scanner sc = new Scanner(System.in);

public static String getCoordinateValue() {
System.out.println("좌표를 입력하세요");
return sc.nextLine();
}
}
26 changes: 26 additions & 0 deletions src/main/java/view/ResultView.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package view;

import domain.Point;

import java.util.List;

public class ResultView {
public static void printCoordinate(List<Point> pl) {
CoordinateView cv = new CoordinateView();
cv.makeCoordinate();
for (Point point : pl) {
cv.drawDot(point.findPointPosition());
}
System.out.println(cv.getCoordinateSb());
// for (int i = 0; i < pl.size(); i++) {
// cv.drawDot(pl.get(i).findPointPosition());
// }
// System.out.println(cv.getCoordinateSb());
}

public static void printLineLength(double len) {
System.out.println("\n");
System.out.println("두 점 사이 거리는 " + String.format("%.6f", len));
}

}
21 changes: 21 additions & 0 deletions src/test/java/domain/LineTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package domain;

import org.junit.Test;

import java.util.ArrayList;
import java.util.List;

import static org.assertj.core.api.AssertionsForClassTypes.assertThat;

public class LineTest {
@Test
public void calcLengthTest() {
Point p1 = new Point(1, 2);
Point p2 = new Point(4, 6);
List<Point> pl = new ArrayList<>();
pl.add(p1);
pl.add(p2);
Line line = new Line();
assertThat( line.getLength(pl)).isEqualTo(5.0000);
}
}
15 changes: 15 additions & 0 deletions src/test/java/domain/PointTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package domain;

import org.junit.Test;

import static org.assertj.core.api.AssertionsForClassTypes.assertThat;

public class PointTest {
@Test
public void subtractPointTest() {
Point p1 = new Point(1, 2);
Point p2 = new Point(4, 6);
assertThat(p1.subtractXPoint(p2)).isEqualTo(-3);
assertThat(p1.subtractYPoint(p2)).isEqualTo(-4);
}
}
55 changes: 55 additions & 0 deletions src/test/java/util/ParserTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package util;

import org.junit.Test;

import java.util.List;

import static org.assertj.core.api.AssertionsForClassTypes.assertThat;

public class ParserTest {
// @Test
// public void splitHyphenTest() {
// Parser p = new Parser("(10,10)-(14,15)");
// String result[] = p.splitHyphen();
// assertThat(result[0]).isEqualTo("(10,10)");
// assertThat(result[1]).isEqualTo("(14,15)");
// }
//
// @Test
// public void removeBracketTest() {
// Parser p = new Parser("test");
// String[] str = {"(10,10)"};
// String[] result = p.removeBracket(str);
// assertThat(result[0]).isEqualTo("10,10");
// str[0] = "(1,5)";
// String[] result2 = p.removeBracket(str);
// assertThat(result2[0]).isEqualTo("1,5");
// }
//
// @Test
// public void splitCommaTest() {
// String str = "10,20";
// Parser p = new Parser("10");
// String result[] = p.splitComma(str);
// assertThat(result[0]).isEqualTo("10");
// assertThat(result[1]).isEqualTo("20");
// }
//
// @Test
// public void stringToIntegerTest() {
// String[] str = {"10", "20"};
// Parser p = new Parser("10");
// Integer[] result = p.stringToInteger(str);
// assertThat(result[0]).isEqualTo(10);
// assertThat(result[1]).isEqualTo(20);
// }

@Test
public void makePositionTest() {
List<Integer[]> v = Parser.makePosition("(10,10)-(14,15)");
assertThat(v.get(0)[0]).isEqualTo(10);
assertThat(v.get(0)[1]).isEqualTo(10);
assertThat(v.get(1)[0]).isEqualTo(14);
assertThat(v.get(1)[1]).isEqualTo(15);
}
}
Loading