Статическое поле count для подсчета количества созданных векторов

язык джава задача прикреплена снизу другие методы я уже сделал, как сделать 3-ий? код тоже снизу

public class Vector2D {

    public double vX;
    public double vY;

    public Vector2D(){
        this.vX = 1.00;
        this.vY = 1.00;
    }

    public Vector2D(double vX, double vY){
        this.vX = vX;
        this.vY = vY;
    }

    public Vector2D(Vector2D n){
        this.vX = n.vX;
        this.vY = n.vY;
    }

    public void add(Vector2D v){
        this.vX += v.vX;
        this.vY += v.vY;
    }

    public void sub(Vector2D v){
        this.vX -= v.vX;
        this.vY -= v.vY;
    }

    public double length(){
        return Math.sqrt(this.vX * this.vX + this.vY * this.vY);
    }

    public void scale(double scaleFactor) {
        this.vX *= scaleFactor;
        this.vY *= scaleFactor;
    }

    public Vector2D normalized()
    {
        double locLength = length();
        double inv_length = (1 / locLength);
        vX *= inv_length;
        vY *= inv_length;
        return this;
    }

    public void print(){
        String vx = String.format("%.2f",this.vX);
        String vy = String.format("%.2f",this.vY);

        System.out.println("(" + vx + ", " +vy + ")");
    }
    public double dotProduct(Vector2D v) {
        return (this.vX * v.vX + this.vY * v.vY);
    }
    class InstanceCounter
    {
        static int Count = 0;
        public InstanceCounter()
        {
            Count++;
        }
    }

    public static void main(String[] args) {
        Vector2D vA = new Vector2D();
        Vector2D vB = new Vector2D(5.0, 7.0);
        Vector2D vC = new Vector2D(vB);
        vA.add(vB);
        vA.print();
        vA.sub(vC);
        vA.print();
        System.out.println(vB.length());
        vC.scale(1.5);
        vC.print();
        vC.normalized();
        System.out.println(vC.length());
        vC.scale(2);
        System.out.println(vA.dotProduct(vB));
        System.out.println(vA.count);
    }
}

введите сюда описание изображения


Ответы (1 шт):

Автор решения: Дмитрий

На самом деле все просто, если перегрузит конструкторы (и в данном случае это единственный корректный путь решения задачи)

public class Vector2D {

    private static int count = 0;

    private double vX;
    private double vY;

    public Vector2D() {
        this(1.0, 1.0);
    }

    public Vector2D(double vX, double vY) {
        this.vX = vX;
        this.vY = vY;
        count++;
    }

    public Vector2D(Vector2D n) {
        this(n.vX, n.vY);
    }

    public void add(Vector2D v) {
        this.vX += v.vX;
        this.vY += v.vY;
    }

    public void sub(Vector2D v) {
        this.vX -= v.vX;
        this.vY -= v.vY;
    }
    
    public double length() {
        return Math.sqrt(this.vX * this.vX + this.vY * this.vY);
    }

    public void scale(double scaleFactor) {
        this.vX *= scaleFactor;
        this.vY *= scaleFactor;
    }

    public void normalized() {
        double inv_length = (1 / length());
        vX *= inv_length;
        vY *= inv_length;
    }

    public double dotProduct(Vector2D v) {
        return this.vX * v.vX + this.vY * v.vY;
    }

    @Override
    public String toString() {
        return "(" + String.format("%.2f", this.vX) + ", " + String.format("%.2f", this.vY) + ")";
    }

    public static void main(String[] args) {
        Vector2D vA = new Vector2D();
        Vector2D vB = new Vector2D(5.0, 7.0);
        Vector2D vC = new Vector2D(vB);
        vA.add(vB);
        System.out.println(vA);
        vA.sub(vC);
        System.out.println(vA);
        System.out.println(vB.length());
        vC.scale(1.5);
        System.out.println(vC);
        vC.normalized();
        System.out.println(vC.length());
        vC.scale(2);
        System.out.println(vA.dotProduct(vB));
        System.out.println(count);
    }

}

И еще... Писать метод print(), чтобы потом вызвать у экземпляра класса vA.print() для вывода в консоль - плохая идея. В программировании очень важно придерживаться ожидаемых решений, иначе ваш код станет в конечном итоге нечитаемым (либо читаемым крайне сложно). На это направлены, к примеру, любые паттерны проектирования: любой изобретаемый самостоятельно велосипед понять на много сложнее, чем общепринятое решение даже при условии, что с технической точки зрения этот самый "велосипед" не хуже. Посему за вывод в консоль отвечает метод toString(), именно его стоит переопределять в этих целях, а не изобретать велосипед в виде метода print() или что-то подобное.

→ Ссылка