Implementacja obiektu Punkt2D

0

Witam, mam do zrobienia takie zadanie. Chciałbym prosić o pomoc przy metodach bo nie do końca rozumiem o co chodzi z "bieżącym obiektem"

Stwórz klasę Punkt2D z dwoma polami x i y typu int, konstruktorem tworzącym obiekt klasy Punkt2D na podstawie podawanych współrzędnych całkowitych x i y, oraz metodę toString() reprezentującą obiekt klasy Punkt2D w postaci {x;y}.
Następnie w klasie tej dodaj metody:
public void odejmowanie(Punkt2D p)
(zmienia stan bieżącego obiektu klasy Punkt2D odejmując do niego inny obiekt klasy Punkt2D)
public void iloczyn(int liczba)
(zmienia stan bieżącego obiektu klasy Punkt2D mnożąc jego współrzędne przez liczbę całkowitą).
W klasie Test utwórz teraz dwa obiekty p1={8;2}, p2={-1;6} klasy Punkt2D i oblicz 4p1-3p2.

3

A co już napisałeś?

0

Na razie mam coś takiego:

public class Punkt2D {
  int x;
  int y;
  
  public Punkt2D(int wspX, int wspY)
  {
    x = wspX;
    y = wspY;
  }

  @Override
  public String toString() {
    return "{" + x + ";" + y + "}";
  }
  
  public void odejmowanie(Punkt2D p){
  }
  
  public void iloczyn(int liczba){
  }
}
  
class Test {
  public static void main(String args[]) {
    Punkt2D p1 = new Punkt2D(8, 2);
    Punkt2D p2 = new Punkt2D(-1, 6);   
  }
}
0
Shinigami7565 napisał(a):

nie do końca rozumiem o co chodzi z "bieżącym obiektem"

To oznacza 'this'. Więc w metodach do zaimplementowania odnieś się do współrzędnych pobieranych za pomocą this.x oraz this.y

1
public class Punkt2D {
    private int x;
    private int y;
    public Punkt2D(int x, int y) {
        this.x = x;
        this.y = y;
    }

    @Override
    public String toString() {
        return "{" + x + ";" + y + "}";
    }
    public void odejmowanie(Punkt2D p) {
        x -= p.x;
        y -= p.y

    }
    public void iloczyn(int liczba) {
        x *= liczba;
        y *= liczba;
    }
}

0

@KamilAdam: Mógłbyś mi wyjaśnić jak mam się odnieść do podanych metod przy działaniu 4p1-3p2

1
Shinigami7565 napisał(a):

@KamilAdam: Mógłbyś mi wyjaśnić jak mam się odnieść do podanych metod przy działaniu 4p1-3p2

A Matematykę ogarniasz?
4p1-3p2 oznacza ze p1 mnożysz przez 4 ( po to masz metodę void iloczyn(int liczba) ), a od tego odejmujesz ( void odejmowanie(Punkt2D p) ) wcześniej wymnożone p2 przez 3 :)

0

To rozumiem ale nie wiem jak mam zapisać by używając metody pomnożyło mi te dwa punkty

4

@Shinigami7565: Najlepiej jakbyś nie modyfikował istniejącego punktu, tylko stworzył nowy.

public class Punkt2D {
  final int x;
  final int y;
  
  public Punkt2D(int x, int x) {
    this.x = x;
    this.y = y;
  }

  @Override
  public String toString() {
    return "{" + this.x + ";" + this.y + "}";
  }
  
  public Punkt2D odejmowanie(Punkt2D p){
      return new Punkt2D(this.x - p.x, this.y - p.y);
  }
  
  public Punkt2D iloczyn(int liczba){
      return new Punkt2D(this.x * liczba, this.y * liczba);
  }
}
  
class Test {
  public static void main(String args[]) {
    Punkt2D p1 = new Punkt2D(8, 2);
    Punkt2D p2 = new Punkt2D(-1, 6);  

    Punkt2D nowy = p1.iloczyn(4).odejmowanie(p2.iloczyn(3));

    System.out.print(nowy);
  }
}

Oczywiście możeszs spróbować modyfikować istniejący punkt, ale to jest mega słabe, tak słabe jak się tylko da. Ktokolwiek Ci zlecił takie zadanie jest debilem.

PS: Notomiast jeśli ktoś już Ci każe specjalnie zrobić źle, bo mutowalny stan to zło, to możesz tak:

class Test {
  public static void main(String args[]) {
    Punkt2D p1 = new Punkt2D(8, 2);
    Punkt2D p2 = new Punkt2D(-1, 6);  

    p1.iloczyn(4);
    p2.iloczyn(3);

    Punkt2D nowy = p1.odejmowanie(p2);

    System.out.print(nowy);
  }
}

Ale to jest złe, nie rób tak. Minęły już 30 lat temu czasy kiedy trzebabyło oszczędzać każdy bit pamięci.

2

Bardzo dziękuje za pomoc i przepraszam za całe zamieszanie

0
record Punkt2D(int x, int y){
    public String toString() {
        return "{" + this.x + ";" + this.y + "}";
    }

    public Punkt2D odejmowanie(Punkt2D p){
        return new Punkt2D(this.x - p.x, this.y - p.y);
    }

    public Punkt2D iloczyn(int liczba){
        return new Punkt2D(this.x * liczba, this.y * liczba);
    }
}

Jeśli używasz najnowszego JDK tj Java 17 to co TomRiddle pokazał możesz zapisac w ten sposób - to tak apropos być był up to date ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1