Печать и сравнение данных массива в Java

#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, так как после последней точки у вас будет посторонняя запятая.