점의 좌표에 대한 클래스를 만든다.
x좌표와 y좌표 따로 저장할 수 있어야하고 순서쌍으로도 가져올 수 있어야한다.
점과 점 사이의 거리 메소드를 작성한다.
이때 java.math를 import하여 그 안에 있는 메소드를 사용한다.(제곱근 메소드 squrt(숫자), 제곱 메소드 pow(밑, 지수))
거리 메소드는 여러가지 경우가 있기에
현재 점과 다른 점 사이의 거리
현재 점과 다른 클래스 점 사이의 거리
현재 점과 원점(0, 0) 사이의 거리
메소드를 오버로딩 한다.
.
.
package Mypoint;
import java.math.*;
public class MyPoint {
private int x = 0;
private int y = 0;
public MyPoint() {}
public MyPoint(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() { return x; }
public void setX(int x) { this.x = x; }
public int getY() { return y;}
public void setY(int y) { this.y = y; }
public int[] getXY() {
int[] arr = {x, y};
return arr;
}
public void setXY(int x, int y) {
this.x = x;
this.y = y;
}
@Override
public String toString() {
return "MyPoint (" + x + ", " + y + ")";
}
public double distance(int x, int y) {
int xDistance = this.x - x;
int yDistance = this.y - y;
double distance = Math.sqrt(Math.pow(xDistance, 2) + Math.pow(yDistance, 2));
return distance;
}
public double distance(MyPoint another) {
int xDistance = this.x - another.x;
int yDistance = this.y - another.y;
double distance = Math.sqrt(Math.pow(xDistance, 2) + Math.pow(yDistance, 2));
return distance;
}
public double distance() {
double distance = Math.sqrt(Math.pow(this.x, 2) + Math.pow(this.y, 2));
return distance;
}
}
.
.
점 클래스가 잘 작성됐는지 확인하는 Test클래스를 만들어 확인한다.
.
.
package Mypoint;
public class TestMyPoint_test {
public static void main(String[] args) {
MyPoint p1 = new MyPoint(); // 생성자 테스트
System.out.println(p1); // toString() 테스트
p1.setX(8); // setters 테스트
p1.setY(6);
System.out.println("x is: " + p1.getX()); // getters 테스트
System.out.println("y is: " + p1.getY());
p1.setXY(3, 0); // setXY() 테스트
System.out.println(p1.getXY()[0]); // getXY() 테스트
System.out.println(p1.getXY()[1]);
System.out.println(p1);
MyPoint p2 = new MyPoint(0, 4); // 다른 생성자 테스트
System.out.println(p2); // 오버로드 메소드 distance() 테스트
System.out.println(p1.distance(p2)); // 어느 메소드?
System.out.println(p2.distance(p1)); // 어느 메소드?
System.out.println(p1.distance(5, 6)); // 어느 메소드?
System.out.println(p1.distance()); // 어느 메소드
MyPoint[] points = new MyPoint[10];
for(int i = 0; i < points.length; i++) {
points[i] = new MyPoint(i + 1, i + 1);
}
for(int i = 0; i < points.length; i++) {
System.out.println(points[i]);
}
}
}
.
.
.
.
잘 확인이 됐다면 점 클래스를 상속받아 원 클래스를 작성한다.
원 클래스는 점 클래스의 좌표가 원의 중심이 된다.
원과 원 사이의 거리는 원의 중심끼리의 거리를 이용한다.
원의 넓이 구할 때는 3.14로 하였지만 java.math 안에 있는 Math.PI()를 이용해됴 된다.
.
.
package Mypoint;
import java.math.*;
public class MyCircle {
MyPoint center;
private int radius = 1;
private int x;
private int y;
MyCircle(){}
MyCircle(int x, int y, int radius){
center = new MyPoint(x, y);
this.radius = radius;
}
MyCircle(MyPoint center, int radius){
this.center = new MyPoint(center.getX(), center.getY());
this.center = center;
this.radius = radius;
}
public MyPoint getCenter() { return center; }
public void setCenter(MyPoint center) { this.center = center; }
public int getRadius() { return radius; }
public void setRadius(int radius) { this.radius = radius; }
public int getX() { return x; }
public void setX(int x) { this.x = x; }
public int getY() { return y; }
public void setY(int y) { this.y = y; }
public double getCircumference() {
return radius * 2 * Math.PI;
}
public double distance(MyCircle another) {
return center.distance(another.center);
}
@Override
public String toString() {
return "MyCircle [center=" + getCenter() + ", radius=" + radius + "]";
}
}
.
.
테스트를 해본다.
.
.
package Mypoint;
public class TestMyCircle {
public static void main(String[] args) {
MyPoint p1 = new MyPoint(1, 2);
MyCircle cir1 = new MyCircle(5, 4, 3);
MyCircle cir2 = new MyCircle(p1, 5);
System.out.println(p1);
System.out.println(cir1);
System.out.println(cir2);
System.out.println(cir1.distance(cir2));
}
}
.
.
728x90
반응형
'Java > 본격 Java 퀴즈 기초' 카테고리의 다른 글
[Java] 동물 추상클래스로 상속받아 구현하기 (0) | 2020.07.10 |
---|---|
[Java] 학생과 직장인 정보 표시하기(abstract 클래스 구현) (0) | 2020.07.10 |
[Java] 동물 울음소리 (다형성(polymorphism) 이용) (0) | 2020.07.10 |
[Java] 학생과 선생의 정보(상속, 중복값 확인) (0) | 2020.07.09 |
[Java] 원과 원기둥 둘레와 넓기 구하기(상속 이용) (0) | 2020.07.09 |