Cześć wszystkim! Mam nietypową, tak mi się zdaje, prośbę. Otóż zadanie udało mi się rozwiązać, jednak wyklepany kod był kodem wyklepanym bez myślenia. Zobaczyłem przykład, utrwaliłem, wklepałem. A wiec, mój kod wyglada tak:
public boolean walka(Kot innyKot) {
if(this.sila > innyKot.sila || this.waga > innyKot.waga || this.wiek > innyKot.wiek){
return true;
Czy byłby ktoś w stanie, przełożyć powyższy kod na bardziej przystępny język, abym mógł go spróbować zrozumieć? Opowiedzieć co dokładnie dzieje się w kodzie. Coś w stylu „Tworzymy nowa metodę o nazwie walka…” „…Jeżeli zdanie jest prawdziwe to zwróć wartość true…”
Edit: Największa dla mnie niewiadomą jest odwołanie metody walka do argumentów Kot i innyKot. Nie rozumiem, czy w tej części tworzymy nowy obiekt Kot o nazwie innyKot? Wydaje mi się to najrozsądniejsze, bo przecież nigdzie wcześniej nie został utworzony taki obiekt.
Dziękuje z góry!
Rozłożenie kodu na części pierwsze.
Rozwiązane
Komentarze (5)
- Popularne
- Najnowsze
- Najstarsze
Musisz się zalogować, aby dodać komentarz
Maciej
5 maja 2022, 13:57
właściwie to z takim warunkiem metodę można zapisać w jednej linii:
return this.sila > innyKot.sila || this.waga > innyKot.waga || this.wiek > innyKot.wiek;
0
Maciej
5 maja 2022, 13:48przydatny
W metodzie walka nie tworzysz żadnych nowych obiektów. Obiekt this reprezentuje obiekt, który wywołał metodę (mówiąc obrazowa this to kot, który "rozpoczął walkę"), a innyKot to obiekt typu Kot który został przekazany jako argument do metody (ten kot się "broni"). Sama implementacja metody to warunek, który mówi coś takiego: jeśli kot który wywołał metodę ma większą silę LUB ma większą wagę LUB jest starszy to zwróć true, czyli kot atakujący, który będzię miał przewagą choćby tylko w jedneym polu wygra
+1
Patryk
6 maja 2022, 21:25
Dziękuje Ci bardzo! Na pewno jestem bliżej zrozumienia tego kodu. Jednak nadal mi czegoś brakuje, nadal nie do końca rozumiem - (Kot innyKot). Gdybyśmy musieli przełożyć to na bardziej dokładny, ludzki język, to brzmiało by to?
Bo w tym momencie nie rozumiem Twojego zdania ; "innyKot to obiekt typu Kot, przekazany jako..." - gdzie "innyKot" został utworzony jako obiekt "Kot"?
Ewidentnie muszę nieco podciągnąć się z logiki :D
0
Maciej
6 maja 2022, 22:04rozwiązanie
Funkcje testujące rozwiązanie tworzą odpowiednie obiekty, aby przetestować rozwiązanie. Dlatego ich nie tworzysz ponieważ w wymaganiach ich nie masz, ale kod w funkcji main mógłby wyglądać tak:
Kot kot1 = new Kot();
Kot kot2 = new Kot():
kot1.sila = 5; // i ustawiasz wagę itp. itd.
kot2.sila = ......
kot1.walka(kot2);
Wtedy kot1 w metodzie walka to this, a innyKot to kot2
Pisząc metodę podajesz w nawiasach najpierw typ obiektu a później jego nazwę. Dla przykładu poniżej metoda sumująca wartość dwóch liczb całkowitych:
public static int sum(int a, int b) {
return a + b;
}
i w main piszesz:
int a = 7;
int b = 5;
System.out.println(sum(a, b);
W przypadku metod statycznych nie musisz tworzyć obiektów, to tak tylko dla przykładu.
+2
Patryk
7 maja 2022, 19:18
Super, dziękuje Ci raz jeszcze. Wszystko dla mnie stało się jasne i nabrało sensu :).
0