• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zadanko - java - problem początkującej

Object Storage Arubacloud
0 głosów
481 wizyt
pytanie zadane 23 kwietnia 2019 w Java przez gorgonkowa Obywatel (1,810 p.)

Hejka. Chciałabym się Was poradzić, co obecnie jest nie tak w wykonaniu mojego zadanka, które brzmi i prezentuje się następująco:

Do klasy Punkt, dopisz:
- trzy konstruktory (bezparametrowy, jednoparametrowy i dwu parametrowy)
- wywołanie konstruktora z innego konstruktora,
-
metodę ustawXY(Punkt punkt). Przeanalizuj przeciążanie metod w przypadku metod: ustawXY(doublewspX, doublewspY) i ustawXY(Punkt punkt);
- metodę obliczającą odległość punktu od punktu będącego parametrem wywołania metody. Jeśli nie podano parametru licz odległośc od początku układu współrzędnych;
- wyświetlanie obiektu za pomocą metody toString()
.

Obecna klasa Punkt prezentuje się następująco:

 


public class Punkt
{
    private int x;
    private int y;
   
    public Punkt()
    {
        x = 0;
        y = 0;
    }
     
    public Punkt(int x, int y)
    {
        this.x = x;
        this.y = y;
    }
     
    void ustawX(int x)
    {
        this.x = x;
    }
     
    int pobierzX()
    {
        return x;
    }
     
    void ustawY(int y)
    {
        this.y = y;
    }
     
    int pobierzY()
    {
        return y;
    }
     
    void ustawXY(int x, int y)
    {
        this.x = x;
        this.y = y;
    }
     
    void wyswietlWspolrzedne()
    {
        
        System.out.println("X= "+ x + ", Y="+ y);
        
    }
     
    
    public static void main(String[] args)
    {
        
        Punkt punkt0 = new Punkt(); // Konstruktopr bez parametrowy
        punkt0.wyswietlWspolrzedne(); // Wyświetla wspołżedne (utworzone w konstruktorze bez parametrowym)
        punkt0.ustawXY(10, 10); // Ustawiamy jakieś wartości X i Y
        punkt0.wyswietlWspolrzedne(); // Wyświetla wspołżedne (utworzone w konstruktorze bez parametrowym)
        
        Punkt punkt = new Punkt(5, 5);
        System.out.println("Wspolrzedne to: ");
        System.out.println("x: " + punkt.pobierzX());
        System.out.println("y: " + punkt.pobierzY());
    }
} 

Próba wykonania zadanka wypadła tak:
 



public class Punkt
{
    private double x;
    private double y;
    private double punkt;
   
    public Punkt()
    {
        x = 0;
        y = 0;
    }
    
    public Punkt(double x)
    {
    	this.x = x;
    }
     
    public Punkt(double x, double y)
    {
        this.x = x;
        this.y = y;
    }
     
    void ustawX(double x)
    {
        this.x = x;
    }
     
    double pobierzX()
    {
        return x;
    }
     
    void ustawY(double y)
    {
        this.y = y;
    }
     
    double pobierzY()
    {
        return y;
    }
     
    void ustawXY(double x, double y)
    {
        this.x = x;
        this.y = y;
    }
    
    void ustawXY(Punkt punkt)
    {
    	this.punkt = punkt;
    }
    
    double ustawXY(double wspX, double wspY)
    {
    	return this.doublewspX, this.doublewspY;
    }
    
    double obliczOdleglosc(double x, double y)
    {
    	if(x>=y)
    	{
    		return this.x-this.y;
    	}
    	else if(x<y)
    	{
    		return this.y-this.x;
    	}
    }
    
    String toString()
    {
    	return x;
    	return y;
    }
    
     
    void wyswietlWspolrzedne()
    {
        
        System.out.println("X= "+ x + ", Y="+ y);
        
    }
     
    
    public static void main(String[] args)
    {
        
        Punkt punkt0 = new Punkt(); // Konstruktopr bez parametrowy
        punkt0.wyswietlWspolrzedne(); // Wyświetla wspołżedne (utworzone w konstruktorze bez parametrowym)
        punkt0.ustawXY(10, 10); // Ustawiamy jakieś wartości X i Y
        punkt0.wyswietlWspolrzedne(); // Wyświetla wspołżedne (utworzone w konstruktorze bez parametrowym)
        
        Punkt punkt = new Punkt(5, 5);
        System.out.println("Wspolrzedne to: ");
        System.out.println("x: " + punkt.pobierzX());
        System.out.println("y: " + punkt.pobierzY());
        System.out.println(x.toString());
        System.out.println(y.toString());
    }
} 

Wyświetla się tutaj sporo błędów, dlatego wrzuciłam całość kodu. Nie mam pojęcia, czy mogłabym kogoś poprosić o pomoc w tym zadanku, bo przyznam, że mocno się w nim gubię i jestem dość początkująca w tym języku. Oczywiście bardzo byłabym wdzięczna za pomoc. :/ :)
 

1 odpowiedź

+1 głos
odpowiedź 23 kwietnia 2019 przez niezalogowany
wybrane 23 kwietnia 2019 przez gorgonkowa
 
Najlepsza
double ustawXY(double wspX, double wspY)
    {
        return this.doublewspX,
        this.doublewspY;
    }

Co to jest? :D W metodzie masz ustawić pola klasy na pewne - podane jako parametry metody - dane. 
 

void ustawXY(double wspX, double wspY)
    {
        this.x = wspX;
        this.y = wspY;
    }

Chodzi tutaj o to, że klasa ma dwa pola prywatne i każdy obiekt, który zostanie stworzony na jej podstawie, ma dostęp do tych pól. Na przykład:

Punkt nowyPunkt = new Punkt();

I teraz jeżeli wywołasz metodę  ustawXY na obiekcie nowyPunkt, musisz podać dwie wartości double, i to będzie to wyglądało tak:

nowyPunkt.ustawXY(0.5, 0.8);

To pola obiektu nowyPunkt będą miały wartości x = 0.5, a y = 0.8
This wskazuje na tzw. parametr niejawny. Pod spodem będzie to nowyPunkt.x = 0.5, nowyPunkt.y = 0.8

______________________________

Tutaj:

void ustawXY(Punkt punkt)
    {
        this.punkt = punkt;
    }

Nazwa metody sugeruje, że masz ustawić x i y, a więc:
 

void ustawXY(Punkt punkt)
    {
        this.x = punkt.pobierzX();
        this.y = punkt.pobierzY();
    }

To należy wywalić:
 

void ustawXY(double x, double y)
    {
        this.x = x;
        this.y = y;
    }

gdyż przeciążenie polega na tym, że tworzysz metodę o takiej samej nazwie, lecz innych parametrach. Istnieje w klasie już metoda, która nazywa się ustawXY i przyjmuje dwa parametry typu double.

To:
 

String toString()
    {
        return x;
        return y;
    }

Jest złe. Metoda ma zwracać String, więc można skorzystać z automatycznego generowania tej metody, na przykład:

 

@Override
public String toString() {
    return "Punkt{" +
            "x=" + x +
            ", y=" + y +
            '}';
}

Co to ma być :D :
 

System.out.println(x.toString());
        System.out.println(y.toString());

Zamień na:
 

System.out.println(punkt.toString());

Poprawiona metoda obliczOdleglosc:

 

double obliczOdleglosc(double x, double y)
    {
        if(x>=y)
        {
            return x-y;
        }
        else
            return y-x;
    }

Nie działa ona tak, jak powinna. Dlaczego sprawdzasz, czy x jest większe od y? W poleceniu jest napisane, że metoda ma obliczać odległość punktu, od punktu podanego jako parametr wywołania metody, czyli powinno być: double obliczOdleglosc(Punkt punkt).
 

double obliczOdleglosc(Punkt punkt)
    {
        double xLength = this.x - punkt.pobierzX();
        double yLength = this.y - punkt.pobierzY();

        return Math.sqrt(Math.pow(xLength, 2) + Math.pow(yLength, 2));
    }

    double obliczOdleglosc()
    {
        double xLength = this.x;
        double yLength = Mthis.y;

        return Math.sqrt(Math.pow(xLength, 2) + Math.pow(yLength, 2));
    }
komentarz 23 kwietnia 2019 przez gorgonkowa Obywatel (1,810 p.)

Ogromnie dziękuję Ci za wyjaśnienie wszystkich błędów :)) Oczywiście śmiało możesz się śmiać z takiej analfabetki, bo niestety jak sam się przekonałeś, to woła o pomstę do nieba :D Oczywiście rozjaśniłeś mi wiele różnych rzeczy, jesteś Super! :)
Właściwie... do szczęścia pozostało jedno zadanko, właśnie związane z tą klasą Punkt, ale nie chciałam go pisać na samym początku, oczywiście mam tutaj na myśli takie poleconko:

Wykorzystaj klasę Punkt do definicji klasy Trojkat przechowującej informacje o trójkącie w kartezjańskim układzie współrzędnych. Dopuszczalna jest również definicja trójkąta po przez podanie długości jego boków (na potrzeby zadania zakładamy, że w tym przypadku użytkownik poda boki z których da się zbudować trójkąt, lub wierzchołki leżące w punktach nie pokrywających się). Napisz metody pozwalające wyznaczyć pole i obwód trójkąta. Zdefiniuj metodę toString() pozwalająca na wyświetlenie wszystkich danych o trójkącie w zależności od sposobu definicji. Zaprojektuj metody pozwalające na klasyfikację trójkąta: ostrokątny prostokątny równoboczny, rozwartokątny.


Tak jak wspomniałam, szaleństwo. :P Hmm może mogę się Tobie jakoś odwdzięczyć? Polecam się w matematyce dyskretnej dla informatyków :)

komentarz 23 kwietnia 2019 przez niezalogowany
Postaram się jutro coś napisać. Ogólnie widzę to tak, że można wykorzystać klasę Punkt i stworzyć trzy obiekty tej klasy przechowujące informacje o położeniu wierzchołków trójkąta.
Możesz obliczyć długości boków takiego trójkąta i wyszukać w internecie odpowiedni wzór. Nie pamiętam już takich informacji, jak wzory na pole trójkąta :D
Spróbuj rozwiązać zadanie sama, bo nie wydaje się bardzo trudne.

Podobne pytania

+4 głosów
2 odpowiedzi 801 wizyt
pytanie zadane 11 czerwca 2016 w Java przez Carmen Sandiego Początkujący (280 p.)
0 głosów
1 odpowiedź 113 wizyt
pytanie zadane 14 listopada 2015 w C i C++ przez Gloxiak Nowicjusz (240 p.)

92,580 zapytań

141,433 odpowiedzi

319,665 komentarzy

61,965 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...