У меня есть задание в моем классе для начинающих по программированию, в java. Это задание (переведено мной со шведского sh на английский sh, поэтому заранее извиняюсь);
Класс CircleList отслеживает количество кругов. Реализуйте класс.
Руководство
- Эта задача должна не только дать практику в использовании ArrayList, но и дать практику разбить проблему на несколько методов. Поэтому вы должны использовать метод
overlaps
внутри метода add
. - И для того, чтобы метод
overlaps
было проще писать, вам следует в overlaps
использовать частный метод circleOverlaps
. - Два круга перекрываются, если расстояние между их исходными точками меньше суммы их радиусов.
Класс Circle выглядит так:
class Circle {
private double radius;
private double x;
private double y;
/** Constructs a circle with the radie radius and the
center in x, y. */
public Circle(double x, double y, double radius) {
this.x = x;
this.y = y;
this.radius = radius;
}
/** Returns the x coordinate of the center. */
public double getX() {
return x;
}
/** Returns the y coordinate of the center. */
public double getY() {
return y;
}
/** Returns the radius. */
public double radius() {
return radius;
}
/** Returns the area. */
public double area() {
return Math.PI * radius * radius;
}
}
И это то, что я придумал до сих пор (методы уже были объявлены, но не реализованы);
public class CircleList {
private ArrayList<Circle> circles;
/** Constructs an empty list for circles. */
public CircleList() {
circles = new ArrayList<Circle>();
}
/** Adds the circle c to the list if it not ovelaps
with any circle in the list. Return true if
circle has been added. */
public boolean add(Circle c) {
circles.add(c);
}
/** Returns true if the circle c ovelaps with any
one circle in this list. */
public boolean overlaps(Circle c) {
}
private boolean circlesOverlaps(Circle c1, Circle c2) {
double r1 = Circle.radius(c1); //radius, x- & y-value of circle 1 (c1)
double x1 = Circle.getX(c1);
double y1 = Circle.getY(c1);
double r2 = Circle.radius(c2); //radius, x- & y-value för circle 2 (c2)
double x2 = Circle.getX(c2);
double y2 = Circle.getY(c2);
double distance = Math.pow((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2), 0.5);
if (r2 >= r1 && distance <= (r2 - r1)){ //c1 is inside c2
}
else if (r1 >= r2 && distance <= (r1 - r2) ) { //c2 is inside c1
}
else if (distance > (r1 + r2)){ //c2 doesn't overlap c1
}
else { //c2 overlaps c1
}
}
}
Я действительно не знаю, с чего начать. И мне действительно не у кого сейчас спросить. Я понимаю, если это даже слишком много для начала. Но все равно спасибо.
Береги себя.