Odpowiadając na twoje pytania przesłane na priv:
A byłbyś w stanie mi napisać dlaczego ja robiłem to źle? Też jako argument przyjąłem int. To źle że Twoją klasę test przyjąłem jako main?
oraz
A bardzo chętnie będę pytał, bo często się z czymś męczę. Chciałem stworzyć obiekt w klasie Punkty żeby wywołać za jego pomocą x i y, to zły tok myślenia?
Punkt jak obiekt może być nieco zbyt abstrakcyjny. Może spróbuj sobie wyobrazić, że masz klasę Pionek
, który reprezentuje ci tego zwykłego pionka szachowego.
Wyobraź sobie, że kładziesz te pionki na szachownicy, tylko zmiast pól 1-8 i A-H masz je określone za pomocą liczb. 1-8 to u ciebie oś X, która może przyjmować wartości od 0 do 7 (bo liczymy od zera =P), a A-H to u ciebie oś Y, która może przyjmować wartości też od 0 do 7.
Masz tą klasę pionka, która ma dwa pola: x i y. One mówią w jakim miejscu znajduje się pionek na szachownicy.
Zrobisz tak:
Pionek pionek1 = new Pionek();
pionek1.x = 3;
pionek1.y = 4;
To stworzysz nowego pionka, który będzie znajdował się na pozycji (3,4);
Zrobisz tak:
Pionek pionek1 = new Pionek();
pionek1.x = 3;
pionek1.y = 4;
Pionek pionek2 = new Pionek();
pionek2.x = 6;
pionek2.y = 2;
To stworzysz dwa nowe pionki, z których pierwszy będą znajdował się na pozycji (3,4), a drugi (6,2);
Zrobisz tak:
Pionek pionek1 = new Pionek();
pionek1.x = 3;
pionek1.y = 4;
Pionek pionek2 = new Pionek();
pionek2.x = 3;
pionek2.y = 4;
To też stworzysz dwa nowe pionki, ale uwaga będą stały na dokładnie tym samym polu szachownicy: (3,4). Nie zmienia to faktu, że to są dwa różne pionki i możesz przesunąć jednego, a zostawić na tym polu drugiego.
Zrobisz tak:
Pionek pionek1 = new Pionek();
To też stworzysz nowego pionka. I gdzie on będzie siedział? Nie, wcale nie poza szachownicą. W twojej klasie pola x i y to są typu int. Jeśli pól nie zainicjalizujesz, to mają domyślne wartości. W przypadku inta jest to zero. Więc Pionek pionek1 = new Pionek();
stworzy ci pionka i położy go na polu (0,0).
Mając tą wiedzę możemy się przyglądnąć bliżej operacji:
1. Pionek pionek1 = new Pionek();
2. pionek1.x = 3;
3. pionek1.y = 4;
Stworzenie i położenie pionka na polu (3,4) składa się z trzech oddzielnych operacji.
W pierwszym kroku tworzysz nowy pionek i układasz go na domyślnym polu, czyli (0,0)
W drugim kroku przesuwasz ten pionek na oś x=3, więc twój pionek znajduje się na pozycji (3,0)
W trzecim kroku przesuwasz ten pionek na oś y=4, więc twój pionek znajduje się na pozycji (3,4)
Rozwijając program dalej stworzyłeś sobie metody ustawX
i ustawY
. Powinny one analogicznie zmieniać x i y, więc powinieneś móc bez problemu zamienić powyższy przykład z poniższym i efekt powinien być taki sam:
1. Pionek pionek1 = new Pionek();
2. pionek1.ustawX(3);
3. pionek1.ustawY(4);
Dodatkowo metody ustaw
mają zwracać ci stare położenie pionka:
Pionek pionek1 = new Pionek();
int stareX = pionek1.ustawX(3); //stareX wynosi 0
int stareY = pionek1.ustawY(4); //stareY wynosi 0
Dlaczego akurat 0? Bo taka jest domyślna i pierwsza wartość pól x i y
Pionek pionek1 = new Pionek();
int najstarszeX = pionek1.ustawX(3); //najstarszeX wynosi 0
int najstarszeY = pionek1.ustawY(4); //najstarszeY wynosi 0
int stareX = pionek1.ustawX(5); //stareX wynosi 3
int stareY = pionek1.ustawY(2); //stareY wynosi 4
Mam nadzieje, że do teraz jest wszystko jasne. Teraz dlaczego twoja implementacja nie działa?
0. public int ustawX(int old) {
1. Punkty wywolanie1=new Punkty();
2. old=this.x;
3. this.x=wywolanie1.x;
4. return old;
}
Wywołujesz int stareX = pionek1.ustawX(5);
(czyli chcesz przesunąć pionek z pola (3,4) na pole (5,4)) i wchodzisz do środka metody ustawX
-
W kroku 0. jesteśmy przed wszystkim co się dzieje. Znajdujemy się w środku obiektu pionek1
, więc this
to jest pionek1
. Przekazaliśmy jako parametr 5
więc old
wynosi 5
. Wartość pionek1.x
(czyli this.x
) wynosi 3
, a wartość pionek1.y
(czyli this.y
) wynosi 4
-
W kroku 1. tworzysz nowy pionek, nazywasz go wywołanie1
i kładziesz na domyślnym polu na szachownicy. W tej chwili masz dwa pionki: pionek1
na polu (3,4) i wywolanie1
na polu (0,0)
-
W kroku 2. zmieniasz zmienną old
na this.x
. this.x
, to to samo co pionek1.x
więc wynosi 3. Zmieniasz wartość old
z 5
na 3
.
-
W kroku 3. zmieniasz pole this.x
(czyli pionek1.x
) na wywołanie1.x
. wywołanie1
to twój nowy pionek, który właśnie stworzyłeś i położyłeś go na domyślnym polu (0,0), więc wywołanie1.x
wynosi 0. Zmianiasz wartość this.x
(czyli pionek1.x
) na 0
. Czyli przesuwasz pionek1
na pole (0,4) z pola (3,4)
-
W kroku 4 zwracasz wartość old
, która wynosi 3
. Czyli do stareX
przypisujesz wartość 3
.
Po całej operacji masz następujący wynik:
- zmienna
stareX
wynosi 3
, czyli sukces, bo tyle wynosiło poprzednie x pionka1
- przemieściłeś pionek z (3,4) na (0,4), czyli źle, bo chciałeś (5,4)
- stworzyłeś całkowicie nowy, niepotrzebny pionek i położyłeś go na polu (0,0)