Punkt, Prostokat, toString(), getY, getX

0

Witam,
Jak nadpisac toString(), zeby wypisywal: „Prostokąt [(0,0),(5,0),(5,5),(0,5)]”, punkty z klasy Punkt ?

public class Punkt
{
	private double x;
	private double y;
	
	public Punkt(double x, double y)
	{
		this.x = x;
		this.y = y;
	}
	
	public Punkt()
	{
		
	}
	
	public double getOdleglosc(Punkt p)
	{
		return Math.sqrt(Math.pow(p.x - x, 2) + (Math.pow(p.y - y, 2)));
	}
	
	public Punkt getX()
	{
		return new Punkt(x, 0); // <-- Jak zrobic zeby pobierało tylko X, zostawiając jako Punkt getX()
	}
	
	public void setX(double x)
	{
		this.x = x;
	}
	
	public Punkt getY()
	{
		return new Punkt(0 , y); // <-- Jak zrobic zeby pobierało tylko Y, zostawiając jako Punkt getY()
	}
	
	public void setY(double y)
	{
		this.y = y;
	}
	
	@Override
	public boolean equals(Object obj)
	{
		if(obj == this)
		{
			return true;
		}
		
		if(!(obj instanceof Punkt))
		{
			return false;
		}
		
		Punkt c = (Punkt) obj;
		
		return Double.compare(x, c.x) == 0 && Double.compare(y, c.y) == 0;
	}
	
	@Override
	public String toString()
	{
		return "(" + x + " , " + y + ")";
	}
}
public class Prostokat
{
	
	public Prostokat(Punkt a, Punkt b, Punkt c, Punkt d)
	{	
		if(a.getOdleglosc(c) == b.getOdleglosc(d))
		{
			System.out.println("Mozna stworzyc prostokat");
			System.out.println(a);
		}
		else
		{
			System.out.println("Nieporawne dane");
		}
	}
	
	@Override
	public String toString()
	{	
		return "Prostokat ["; // <-- Jak nadpisac zeby wypisywal: „Prostokąt [(0,0),(5,0),(5,5),(0,5)]”, punkty z klasy Punkt
	}
}
public class Main
{
	public static void main(String args[])
	{
		System.out.println("Punkty:");
		Punkt pkt1 = new Punkt(0,0);
		Punkt pkt2 = new Punkt(5,0);
		Punkt pkt3 = new Punkt(5,5);
		Punkt pkt4 = new Punkt(0,5);
		
		Prostokat prostokat = new Prostokat(pkt1, pkt2, pkt3, pkt4);
		System.out.println(prostokat);
	}
}

1

Konstruktor prostokąta nie przypisuje zmiennych. Nie ma zresztą do czego, bo takowe nie istnieją. Ciężko cokolwiek dalej zrobić bez tego.

1
    public double getX()
    {
        return new Punkt(x, 0); // <-- Jak zrobic zeby pobierało tylko X, zostawiając jako Punkt getX()
    }

    public void setX(double x)
    {
        this.x = x;
    }
  1. Wydaje mi się, że skoro setX() przyjmuje double to getX() także powinno zwracać double.
  2. W klasie prostokąt nigdzie nie przechowujesz danych jego rogów ( już pomijając to, że do przechowywania prostokąta wystarczą 2 punkty ).
  3. Punkt 2 powoduje to, że w chwili obecnej nie masz szans na wypisanie tych współrzędnych.
0
TheLearner napisał(a):

Konstruktor prostokąta nie przypisuje zmiennych. Nie ma zresztą do czego, bo takowe nie istnieją. Ciężko cokolwiek dalej zrobić bez tego.

Znaczy to ma tak wyglądać, że zmienne pochodzą z klasy Punkt czyli te x i y. Te punkty mam stworzyć i przekazać, coś takiego ... Wypisanie ich mógłbym zrobić w konstruktorze, ale potrzebuje jakoś przenieść do toString();

2
konto anonimow napisał(a):

zmienne pochodzą z klasy Punkt czyli te x i y. Te punkty mam stworzyć i przekazać,

No właśnie nie przekażesz ich z klasy Punkt do klasy Prostokąt, skoro nie masz zadeklarowanej reprezentacji punktów w prostokącie. Prostokąt to obiekt, który posiada punkty.

0
katakrowa napisał(a):
>     public double getX()
>     {
>         return new Punkt(x, 0); // <-- Jak zrobic zeby pobierało tylko X, zostawiając jako Punkt getX()
>     }
> 
>     public void setX(double x)
>     {
>         this.x = x;
>     }
> ```
> 
> 1. Wydaje mi się, że skoro setX() przyjmuje double to getX()  także powinno zwracać double.
> 2. W klasie prostokąt nigdzie nie przechowujesz danych jego rogów ( już pomijając to, że do przechowywania prostokąta wystarczą 2 punkty ).
> 3. Punkt 2 powoduje to, że w chwili obecnej nie masz szans na wypisanie tych współrzędnych.

1. Tak mam w zadaniu.
2. A nie da się ich przechowywać w innej klasie i jakoś je podpiąć. Mam na myśli klase Punkt, tam znajdują się dane rogów.
0
TheLearner napisał(a):
konto anonimow napisał(a):

zmienne pochodzą z klasy Punkt czyli te x i y. Te punkty mam stworzyć i przekazać,

No właśnie nie przekażesz ich z klasy Punkt do klasy Prostokąt, skoro nie masz zadeklarowanej reprezentacji punktów w prostokącie. Prostokąt to obiekt, który posiada punkty.

To jak to zrobić w takiej sytuacji, aby nie dodawać zmiennych do klasy Prostokat ?

1
konto anonimow napisał(a):
  1. A nie da się ich przechowywać w innej klasie i jakoś je podpiąć.

Da się :) Po części to robisz :)
W klasie Punkt masz reprezentacje zmiennych x i y. Konkretne dane tych punktów podajesz w klasie Main. Potem "podpinasz" je w konstruktorze do obiektu Prostokąt w klasie Main. I to wszystko robisz mniej więcej dobrze. Problem w tym, że w klasie Prostokąt, nie masz zadeklarowanej reprezentacji tych danych (x,y) więc konstruktor Prostokąta w klasie Main bierze je i wyrzuca (nie ma z nimi co zrobić).
Wątpię żeby zadanie polegało na tym, że nie wolno Ci nic zadeklarować w klasie Prostokąt.

konto anonimow napisał(a):

To jak to zrobić w takiej sytuacji, aby nie dodawać zmiennych do klasy Prostokat ?

Jeżeli nie możesz z jakiegoś dziwnego względu zadeklarować zmiennych x i y w klasie Prostokąt, to zostaje jeszcze:

  1. Zadeklarować w klasie Prostokat obiekt Punkt
  2. Zadeklarować w klasie Prostokat String i przypisywać do niego gettery z toString z klasy Punkt w konstruktorze Prostokąt
    Ale to jest mega dziwne.

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