Mi a szemantikai hiba az alábbi C# kódrészletben?
public static Ember[] Különbségszámítás(Ember[] napok)
{
for(int i=0; i<napok.Length; i++)
{
if(i+1==napok.Length)
{
if(napok[0].Nap+365-napok[i].Nap<napok[i].Nap-napok[0].Nap)
napok[i].Nap=napok[0].Nap+365-napok[i].Nap;
else
napok[i].Nap=napok[i].Nap-napok[0].Nap;
}
else
napok[i].Nap=napok[i+1].Nap-napok[i].Nap;
}
return napok;
}
A teljes kód arra szolgálna, hogy megmondja emberek egy csoportjáról, hogy melyik kettő születésnapja van a legközelebb egymáshoz. Ez a függvény számítaná a dátumok közti napok számát. Bemenetként egy növekvő sorrendbe rendezett objektumtömböt kap. Minden objektumnak van lekérdezhető Nap tulajdonsága, ami megadja, hogy az a dátum az év hanyadik napja (szökőnap nélkül).
A for ciklusban folyamatosan vizsgáljuk, hogy elértük-e már az utolsó napot (ha i+1 egyenlő lesz a tömbméretével, akkor ugye a 0-val való indexelés miatt az már kimutatna a tömbből, így i az utolsó index).
Ha még nem értük el, akkor folyamatosan átadjuk a Nap tulajdonságnak új értékként az i és az utánna lévő nap különbségét (mivel növekvően rendezett a tömb, ezt megtehetjük, és visszafele is egyértelműen megmondható, melyik különbség melyik két i-hez tartozik, hiszen a különbségek i-je nem tér el a napok i-jétől).
Eddig jó is, a probléma viszont akkor van, ha elérjük az utolsó i-t. Ilyenkor az ehhez tartozó Napban az év első és utolsó dátumának különbségét kéne eltárolnunk, mivel az évek is ugye körbemennek, és meg kell vizsgálnunk, azt is, hogy nem-e ez a kettő van-e a legközelebb egymáshoz (pl. jan. 1. és dec. 31.).
Ezt úgy gondoltam megvalósítani, hogy megvizsgáltatom vele, hogy melyik kisebb, első dátum + 365 - utolsó dátum vagy az utolsó dátum- első dátum. És amelyik kisebb, azt az értéket tároljuk el a tömb utolsó helyén (amiről később szintén egyértelműen tudjuk, hogy az utolsó és az első i-hez tartozik).
Valami viszont egyértelműen rossz a gondolatmenetemben és/vagy a kódomban, mert a debugger szerint az utolsó Nap helyre (ami megint mondom, már a különbségeket tárolja) az második és az első elem különbsége került, nem az utolsó és az elsőé.
Hol rontottam el?
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!