Wpis z mikrobloga

#programowanie #pytaniedoeksperta #csharp

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");
}
  • 23
@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.
@Paitius: zmieniłem przedział żeby rand1 było między 3 i 4, a rand2 między 8/9. Nie wyrzuca mi tak, mimo że suma większa niż 10.

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.
@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: 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ć?