Problem z metodą zwracającą poprzednią wartość pola klasy

0

Cześć, uczę się z książki Marcina Lisa pod tytułem C# Praktyczny poradnik i natrafiłem na problem. Obecnie jestem na ćwiczeniu 15.2, a treść jest następująca "W klasie Punkt z listingu 3.16 zmień kod metod UstawX i UstawY, tak aby zwracały one poprzednią wartość zapisywanych pól. Zadaniem metody UstawX jest więc zmiana wartości pola x i zwrócenie jego poprzedniej wartości. Metoda UstawY ma wykonywać analogiczne zadania w stosunku do pola y." Chciałbym pobrać poprzednią wartość pola x, y z klasy Punkt. Mógłby mnie ktoś pokierować bądź wskazać co przeczytać, żeby zrozumieć swój błąd. W rozwiązaniach M.Lisa jest identyczne rozwiązanie do mojego.

using System;

class Punkt
{
    int x;
    int y;

    int PobierzX()
    {
        return x;
    }

    int PobierzY()
    {
        return y;
    }

    void UstawXY(int wspX, int wspY)
    {
        x = wspX;
        y = wspY;
    }

    int ustawX(int wspX)//nie dziala
    {
        int temporary = x;
        x = wspX;
        return temporary;
    }

    int ustawY(int wspY)//nie dziala
    {
        int temporary = y;
        y = wspY;
        return temporary;
    }

    void WyswietlWspolrzedne()
    {
        Console.WriteLine("współrzędna x = " + x);
        Console.WriteLine("współrzędna y = " + y);
    }

    static void Main()
    {
        Punkt pierwszyPunkt = new Punkt();
        Punkt drugiPunkt = new Punkt();
        Punkt trzeciPunkt = new Punkt();

        pierwszyPunkt.UstawXY(100, 100);

        Console.WriteLine("pierwszyPunkt:");
        pierwszyPunkt.WyswietlWspolrzedne();

        drugiPunkt.UstawXY(400,400);

        Console.WriteLine("\ndrugiPunkt:");
        drugiPunkt.WyswietlWspolrzedne();

        Console.WriteLine("\ntrzeciPunkt:");
        Console.WriteLine("współrzędna poprzedniego x = " + trzeciPunkt.ustawX(500));//dlaczego 0
        Console.WriteLine("współrzędna poprzedniego y = " + trzeciPunkt.ustawY(500));//dlaczego 0
        Console.WriteLine(trzeciPunkt.x);
        Console.WriteLine(trzeciPunkt.y);
    }
}
0

Nigdzie wcześniej nie ustawiasz wartości x i y dla trzeciPunkt, więc korzysta on z domyślnej wartości int'a, dla którego ona wynosi 0.

0

Dla trzeciPunkt przypisałem 500, 500, ale chciałbym osiągnąć taki efekt, aby podczas tego przypisania wartością zwracaną było x dla drugiPunkt lub y dla drugiPunkt. Obecnie są to 0, 0.

        Console.WriteLine("współrzędna poprzedniego x = " + trzeciPunkt.ustawX(500));//dlaczego 0
        Console.WriteLine("współrzędna poprzedniego y = " + trzeciPunkt.ustawY(500));//dlaczego 0
1

Z treści zadania, którą podałeś wszystko działa poprawnie. Jest zwracana poprzednia wartość dla x i y. Przez to, że tych wartości dla trzeciPunkt nie ustawiłeś wcześniej to jest zwracane 0. Gdy jeszcze raz wywołasz metodę ustawX lub ustawY to zwróci Ci 500. Jeśli chciałbyś zwracać wartości x i y dla drugiPunkt to musiałbyś go jakoś przekazać w konstruktorze.

1
        Console.WriteLine("\ntrzeciPunkt:");
        trzeciPunkt.ustawX(400);
        trzeciPunkt.ustawY(400);
        Console.WriteLine("współrzędna poprzedniego x dla trzeciPunkt= " + trzeciPunkt.ustawX(500));//teraz prawidlowo 400
        Console.WriteLine("współrzędna poprzedniego y dla trzeciPunkt= " + trzeciPunkt.ustawY(500));//teraz prawidlowo 400
        trzeciPunkt.WyswietlWspolrzedne();//500

Dzięki serdeczne. Teraz rozumiem. Źle na początku zinterpretowałem treść zadania.

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