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
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@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".
  • Odpowiedz
@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.
  • Odpowiedz
@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
  • Odpowiedz
@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.
  • Odpowiedz
@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ć
  • Odpowiedz
@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
  • Odpowiedz
@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)
  • Odpowiedz
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?
  • Odpowiedz
@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ł?
  • Odpowiedz
@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ć?
  • Odpowiedz