Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Silmukka ei käy läpi viimeistä arvoa

Oskuz [21.09.2013 14:22:12]

#

Juu, vielä tämmönen probleema että jostain syystä seuraava pätkä ei käy läpi viimeistä arvoa.

$luvut= explode ("|",$_REQUEST['luvut']);
for($i=0;$i<count("$luvut");++$i )
   { for ($k=0;$k<count("$luvut"); $k++)
         { if ($luvut[$k]==$luvut[$i]){$maara++;} }
     $maara=$maara-1;}

Mod. huom: uudesta kysymyksestä uusi aihe!

Hengilö [21.09.2013 15:13:07]

#

Count-funktiolle annetaan parametrina taulukko, ei merkkijono.

Kannattaisi muuten laittaa välejä tuonne operaattorien molemmille puolille. $i = 0 näyttää ainakin omasta mielestäni paremmalta kuin $i=0.

P.S. Tiedätkö mitä "järkevä sisennys ja rivitys" tarkoittaa?

Edit: Ja tuon ekan loopin vikaan kohtaan pitää laittaa $i++ eikä ++$i.

The Alchemist [21.09.2013 15:37:12]

#

$i++ ja ++$i ovat tässä tapauksessa ihan sama asia. Koodatessa täytyy kuitenkin olla koherentti ja välttää nollat taulussa räpeltämistä, kuten tässä on nyt tehty. Tähän liittyen: jos käytät silmukan alustuksessa syntaksia ++$i kerran, niin sitten käytät sitä aina, ja sama pätee myös toisin päin. Ei ole mitään järkeä sekoitella tyylejä, koska se heikentää luettavuutta.

Metabolix [21.09.2013 15:57:47]

#

Funktiolle count pitäisi antaa parametri $luvut eikä "$luvut". Nykyiseltä silmukaltasi jää käymättä paljon muitakin arvoja kuin vain viimeinen.

Suosittelen myös koodaustyylin muuttamista, tuo nykyinen tyylisi on ihan kummallinen ja todella vaikea lukea. Katso vaikka oppaista mallia.

$maara = 0;
for ($i = 0; $i < count($luvut); ++$i) {
	for ($j = 0; $j < count($luvut); ++$j) {
		if ($i != $j && $luvut[$i] == $luvut[$j]) {
			$maara += 1;
		}
	}
}

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta