#java
#java
Вопрос:
Недавно я начал изучать Java, и у меня возникли некоторые проблемы с пониманием того, как заставить массивы работать так, как я хочу. Здесь у меня есть задание создать класс polygon с различными методами внутри. По сути, класс представляет собой выпуклый многоугольник в плоскости. Массив получает пользовательский ввод, состоящий из координат x и y, и помещает их внутрь. (максимальное количество вершин равно 10). Есть некоторые функции, которые я понятия не имею, как выполнять, и я был бы очень признателен за помощь. Класс Point — который используется для получения координат
public class Point {
private double _x;
private double _y;
public Point() {
this._x = 0.0D;
this._y = 0.0D;
}
public Point(double x, double y) {
this._x = x;
this._y = y;
}
public Point(Point other) {
this._x = other._x;
this._y = other._y;
}
public double getX() {
return this._x;
}
public double getY() {
return this._y;
}
public void setX(double x) {
if (x >= 0.0D)
this._x = x;
}
public void setY(double y) {
if (y >= 0.0D)
this._y = y;
}
public boolean isAbove(Point other) {
return (this._y > other._y);
}
public boolean isUnder(Point other) {
return other.isAbove(this);
}
public boolean isLeft(Point other) {
return (this._x < other._x);
}
public boolean isRight(Point other) {
return other.isLeft(this);
}
public double distance(Point other) {
double distance = Math.sqrt(Math.pow(this._x - other._x, 2.0D) Math.pow(this._y - other._y, 2.0D));
return distance;
}
public void move(double dx, double dy) {
double x = this._x dx;
double y = this._y dy;
if (x >= 0.0D amp;amp; y >= 0.0D) {
this._x = x;
this._y = y;
}
}
public boolean equals(Point other) {
return (this._x == other._x amp;amp; this._y == other._y);
}
public String toString() {
return "(" this._x "," this._y ")";
}
}
Класс Polygon — основной класс, над которым я работаю
/**
* Write a description of class Polygon here.
*
* @author [REDACTED]
* @version (Ver 1.0)
*/
public class Polygon {
private Point[] _vertices;
private int _noOfVertices;
public Polygon() {
_vertices = (Point[]) new Point[10];
_noOfVertices = 0;
}
public Polygon(Point[] arr) {
_vertices = (Point[]) new Point[10];
_noOfVertices = 0;
if (arr.length > 10) {
return;
}
// for (Point P : arr)
for (int i = 0; i < arr.length; i ) {
if (arr[i] != null) {
_vertices[i] = arr[i];
_noOfVertices ;
}
}
}
public boolean addVertex(double x, double y) {
if (_noOfVertices >= 10)
return false;
Point p = new Point(x, y);
_vertices[_noOfVertices] = p;
_noOfVertices ;
return true;
}
public Point highestVertex() {
for (int i = 0; i < _noOfVertices; i ) {
}
}
public String toString() {
}
public double calcPerimeter() {
for (int i = 0; i < arr.length; i ) {
}
}
public double caclArea() {
Point ppp = _vertices[zzz]
}
public boolean isBigger(Polygon other) {
}
public int findVertex(Point p) {
for (int i = 0; i < _noOfVertices; i ) {
if (p.equals(_vertices[i])) {
return i;
}
}
return -1;
}
public Point getNextVertex(Point p) {
for (int i = 0; i < _noOfVertices; i ) {
if (p.equals(_vertices[i])) {
if (i == _noOfVertices - 1) {
return new Point(_vertices[0]);
}
return new Point(_vertices[i 1]);
}
}
return null;
}
public Polygon getBoundingBox() {
}
}
Я понятия не имею, как выполнять эти функции:
Строка 44: общедоступная точка highestVertex() {} — возвращает копию самой высокой точки в полигоне. Если существует более одной вершины в одном и том же Y — метод вернет первую, с которой он столкнулся (с указанным Y), Если нет вершин, иначе массив пуст, он вернет null.
Строка 52: общедоступная строка toString() {} — метод, который возвращает строку точек, представляющих многоугольник. Строка должна быть в следующем формате:
Многоугольник имеет 5 вершин:
((2.0,1.0),(5.0,0.0),(7.0,5.0),(4.0,6.0),(1.0,4,0))
Если вершин нет, метод вернет строку в следующем формате:
Многоугольник имеет 0 вершин.
Английский не является моим родным языком, поэтому я заранее приношу извинения за любые грамматические ошибки.
Ответ №1:
Во-первых, здесь не стоит задавать домашние вопросы, это концепция, которую вы должны изучить.
В highestVertex() они описывают для вас 3 случая: 1-й случай: если точка-y равна другой точке-y, верните первую вершину, имеющую точку-y. 2-й случай: если arr не имеет элементов, возвращает значение null. 3-й случай: в цикле проверьте значение y каждого элемента в массиве и сравните его с наибольшим значением y на данный момент. Используйте эту строку перед циклом:
int max = Integer.MIN_VALUE;
Внутренний цикл:
if (arr[i] > max) max = arr[i]
Для toString() снова выполните цикл по всему массиву и добавьте каждую точку в строку отслеживания, которую вы вернете.
String str = "";
цикл
str = arr[i].toString() ",";
Это работает, за исключением того, что вам нужно выполнять цикл до предпоследнего элемента arr, так как после последней точки у вас будет посторонняя запятая.