Hej, niedawno zacząłem naukę i robię sobie proste zadania z różnych poradników. I mam pytanie co do jednej konstrukcji, która co prawda daje poprawny rezultat, ale nie jestem jej w 100% pewny (Visual Studio też nie i daje ostrzeżenie xd)
Zadanie : Wylosuj 2 liczby z przedziału 1 do 10. Wypisz “tak”, jeżeli pierwsza z nich jest większa od 5, a ich suma, większa od 10.
A pytanie konkretnie o trzecią linijkę kodu, bo Visual Studio pisze że wystąpiła pusta instrukcja, ale z tego co rozumiem to definiuje ona przejście do else if. Czy to na pewno dobrze wszystko, czy przez przypadek kod działa?
Kod sugerowany z zadania wygląda tak
{ int rndA = Random.Range (0, 10); int rndB = Random.Range (0, 10);
@Karpaj: co po tym pierwszym ifie ma sie dziac? nic sie wlasnie nie dzieje bo nic nie dales, daj operator jakis i w jednym ifie skonstruuj tak jak masz w sugerowanym kodzie i bedzie gituwa
@WladcaSlimakow Pierwszy if ma definiować czy pierwsza wartość jest większa niż 5 - inaczej ma się nic więcej nie dziać. Jak np. wygeneruje mi np. 4 i 8, to mimo że więcej niż 10 razem, to kod nie zwraca mi "tak".
@Paitius: Ok, ale w takim razie czemu kod działa? Bo rozumiem że jakby pierwszy if nic nie robił (był pustą instrukcją), to else if zawsze by działał kiedy suma przekracza 10, a tak się nie dzieje.
@Karpaj: Jeżeli pierwszy if jest spełniony to nic nie rób, jeżeli NIE jest spełniony, to sprawdź else if. Jeżeli else if jest spełniony, to napisz „Tak”, jeżeli nie przejdź dalej
@Karpaj: W sugerowanym kodzie masz - Jeżeli pierwsza liczba jest większa od 5 i suma tych dwóch liczba jest większa od 10, wyświetl „Tak”. Jeżeli nie, nic nie rób. Najłatwiej sobie na początku to tak tłumaczyć
@Karpaj a pusta instrukcja if tu występuje, bo po pierwszym ifie jest pusta instrukcja. Nie znam się na ce płotku ale nawet jeśli to się skompiluje, to i tak będzie to bardzo brzydka praktyka
@Karpaj: If i else działa na takiej zasadzie, ze jeżeli if zostanie spełniony, to else już nie zostanie sprawdzony i zostanie zignorowany. Dopiero jak if nie będzie spełniony, to zostanie sprawdzony (jeżeli mamy konstrukcje else if) lub wykonana instrukcja (w przypadku samego else)
Widzę mały błąd, teraz dopiero zauwazyłem że miało być if (rand1 <= 5) ;
Ogólnie dzięki za pomoc bo chyba zrozumiałem. Skoro miałem sprawdzić czy x jest większe, a sprawdzam w kodzie czy jest mniejsze/równe, to stąd instrukcja nie jest spełniona kiedy według zadania jest poprawna (czyli chcemy 6 lub więcej, ale if zamyka się na 5), stąd przechodzi do else if. Dobrze rozumiem?
@Paitius: Nie powinienem użyć z jakiego powodu? Bo na razie w każdym poradniku jest żeby próbować iść swoim pomysłem do rozwiązania. Konstrukcja działa, choć jest pewnie trochę mniej czytelna - to powód dla którego nie powinienem jej stosować? Czy może jest inny, że mój pomysł działa na takich danych, ale na innych by się posypał?
@Paitius: No ale działa przecież, else if jest wykonywany tylko kiedy if nie jest spełniony, a if ustawiony jest żeby nie był spełniony kiedy warunki zadania są poprawne (szukamy 6 i więcej, więc if szuka do max 5).
Stąd pytam - kod działa, rozumiem już czemu else if działa kiedy powinien (mimo ze trochę przypadkiem to napisałem), stąd czemu nie powinienem tego stosować?
Kilkaset tysięcy żeby jeździć w kurtce z prędkością dużego to całkiem rozsądny wybór. To chyba taka nowa definicja lukausu w Polsce. Bez spinki tylko:p #transport #bogactwo #zima
Hej, niedawno zacząłem naukę i robię sobie proste zadania z różnych poradników. I mam pytanie co do jednej konstrukcji, która co prawda daje poprawny rezultat, ale nie jestem jej w 100% pewny (Visual Studio też nie i daje ostrzeżenie xd)
Zadanie : Wylosuj 2 liczby z przedziału 1 do 10. Wypisz “tak”, jeżeli pierwsza z nich jest większa od 5, a ich suma, większa od 10.
mój kod
{
rand1 = (Random.Range(1, 10));
rand2 = (Random.Range(1, 10));
if (rand1 < 5) ;
else if (rand1 + rand2 > 10) { Debug.Log("tak"); }
}
A pytanie konkretnie o trzecią linijkę kodu, bo Visual Studio pisze że wystąpiła pusta instrukcja, ale z tego co rozumiem to definiuje ona przejście do else if. Czy to na pewno dobrze wszystko, czy przez przypadek kod działa?
Kod sugerowany z zadania wygląda tak
{
int rndA = Random.Range (0, 10);
int rndB = Random.Range (0, 10);
if (rndA > 5 && (rndA + rndB) > 10) {
Debug.Log ("tak");
}
Pierwszy if ma definiować czy pierwsza wartość jest większa niż 5 - inaczej ma się nic więcej nie dziać.
Jak np. wygeneruje mi np. 4 i 8, to mimo że więcej niż 10 razem, to kod nie zwraca mi "tak".
if (rand1 < 5) ;
Czyli if nie jest spełniony kiedy mam randoma 5 lub mniejszego.
Więc przechodzi do else if tylko kiedy mam 6 lub więcej.
if (rand1 <= 5) ;
Ogólnie dzięki za pomoc bo chyba zrozumiałem. Skoro miałem sprawdzić czy x jest większe, a sprawdzam w kodzie czy jest mniejsze/równe, to stąd instrukcja nie jest spełniona kiedy według zadania jest poprawna (czyli chcemy 6 lub więcej, ale if zamyka się na 5), stąd przechodzi do else if. Dobrze rozumiem?
Komentarz usunięty przez autora
Stąd pytam - kod działa, rozumiem już czemu else if działa kiedy powinien (mimo ze trochę przypadkiem to napisałem), stąd czemu nie powinienem tego stosować?