• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Instrukcje warunkowe if else i nadpisanie jej

Object Storage Arubacloud
0 głosów
296 wizyt
pytanie zadane 8 stycznia 2019 w PHP przez maniek1717 Nowicjusz (150 p.)

Witam

Zaczynam swoją zabawę w PHP i nie jestem pewny instrukcji. Czy to w ogóle ma prawo działać czy nie, jeśli tak to gdzie jest błąd? Instrukcja ma zaznaczać liczby podzielne przez 4, nastepnie podzielne przez 10 i następnie przez 4 i 10, lecz tego nie robi, nie nadpisuje poprzednich instrukcji. 

for ($i = 1; $i <= 50; $i++){
    if ($i % 4 == 0) {
        echo '<h2 style="color:green";> Zmienna '.$i.' jest podzielna przez 4</h2>';
    }else if ($i % 10 == 0 ) {
        echo '<h2 style="color:red";> Zmienna '.$i.' jest podzielna przez 10</h2>';
    }else if ($i % 4 == 0  && $i % 10 == 0) {
        echo '<h2 style="color:blue";> Zmienna '.$i.' jest podzielna przez 4 i 10</h2>';
    }else{
        echo "$i <br>";
        } 
    }

 

3 odpowiedzi

+1 głos
odpowiedź 8 stycznia 2019 przez Chess Szeryf (76,710 p.)
wybrane 9 stycznia 2019 przez maniek1717
 
Najlepsza

Jeśli chcesz, aby kolejne instrukcje nadpisywały Ci wcześniejsze, to musisz pisać oddzielne if'y. Najwyraźniej źle zrozumiałeś ideę stosowania elseif. Konstrukcja, której użyłeś działa w następujący sposób:

Jeśli "wartość ze zmiennej i" jest podzielna przez cztery to wykonaj instrukcję pod spodem i wyjdź z if'a (instrukcji warunkowej) ..., itd..

Chodzi oto, że jeśli którykolwiek z warunków się wykona, (dalej) niżej nie schodzi interpreter, tylko wychodzi z if'a, kończy działanie tej instrukcji. Musiałbyś napisać coś takiego, żeby to poszło zgodnie z Twoją myślą:

for($i=1;$i<=50;$i++) {
   if($i % 4 === 0) {
      echo "1";
   }
   if($i % 10 === 0) {
      echo "2";
   }
   if($i % 4 === 0 && $i % 10 === 0) {
      echo "3";
   }
}
function divider_division($number1, $divider1, $result1) {
   return ($number1 % $divider1 === $result1) ? true : false;
}

for($i=1;$i<=50;$i++) {
   if(divider_division($i, 4, 0)) {
      echo "9";
   }
   if(divider_division($i, 10, 0)) {
      echo "8";
   }
   if(divider_division($i, 4, 0) && divider_division($i, 10, 0)) {
      echo "7";
   }
}
+2 głosów
odpowiedź 8 stycznia 2019 przez niezalogowany
Użyj 4 if a nie else if
+1 głos
odpowiedź 8 stycznia 2019 przez Arkadiusz Waluk Ekspert (287,950 p.)
Co to znaczy "lecz tego nie robi, nie nadpisuje poprzednich instrukcji"?

Na pierwszy rzut oka widzę jeden problem - ostatni warunek nigdy się nie wykona. Po prostu jeśli coś będzie podzielne przez 4, to spełni się pierwszy warunek i dalej już nie pójdzie. Jeśli będzie podzielne przez 10, to spełni się drugi i zakończy. Jeśli nie będzie podzielne ani przez 4 ani przez 10, wtedy tylko dojdzie do ostatniego warunku, a ten jak wiadomo się nie spełni. Aby to poprawić musiałbyś przesunąć ostatni warunek na początek - wtedy jeżeli nie spełnią się obydwa (nie będzie jednocześnie podzielne przez 4 i 10) zacznie sprawdzać kolejne.

Podobne pytania

+1 głos
1 odpowiedź 337 wizyt
+1 głos
1 odpowiedź 143 wizyt
pytanie zadane 9 lutego 2021 w C i C++ przez JumpFly Nowicjusz (130 p.)
0 głosów
1 odpowiedź 195 wizyt

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...