Mi lehet a hiba? (C#)
Egy jól ismert játékocskát szerettem volna megírni C#-ban. A játék lényege, hogy furcsa szituációkat állít össze: Kiválaszt egy nevet, egy helyszínt, egy cselekményt és egy társat az adatbázisból, majd mondattá rakja össze azokat pl.: Jóska a focipályán tv-t néz Pistával. Mindezt teljesen véletlenszerűen. A következő mondat már teljesen más lesz pl.: Marci az étteremben autót vezet Andrással.
A programom bár működik, van egy kis baj vele. Olyan, mint ha előre összerakná a mondatokat, majd azokból választana ki egyet véletlenszerűen. Itt a forráskód, mi lehet a hiba?
Tudom, nem könnyű átlátni egy ilyen amatőr forráskódot, de igyekeztem mindent érthetővé tenni.
Köszönöm a válaszokat, minden hasznosra megy a zöld kéz.










Én így nevezném el őket:
nevek - nevekLista
hely - helyekLista
csinál - tevekenységLista
szam1 - nevekIndex
szam2 - helyekIndey
szam3 - tevekenysegIndex
r1/r2/r3/r4 - rnd
Mivel a visual studio max 3-4 betű után felajánlja a változóneveket, így tetszőleges hosszú lehet.
A nevek2-nek semmi értelme, ha ugyanaz van benne mint a nevekben
string tömbök helyett használj string listákat
Ha a külső while ciklus végtelenciklus akkor elég annyi, hogy
while(true)
nem kell hozzá változó
De én azért megkérdezném a végén, hogy akar-e újra játszani, és ha nem akar akkor beleraksz egy "break;"-et és kilép a ciklusból





1. Magyar neveket használni eleve problémás.
2. Az indexeket elnevezni eleve fölösleges, rögtön beszúrhatóak a [] operátor közé.
3. Az index generálásnál nagyon rossz ötlet beégetni magic numbereket. A tömb vagy lista hosszát érdemes lekérdezni.





Indexek tárolása nélkül hogy ellenőrzöd, hogy a nevek különbözőek legyenek.
A helyet és a cselekvés indexét viszont el lehet hagyni





Még egy tipp: a cikluson kívül példányosítsad a Random-ot. Nem fog a működés változni, csak nem hozza létre folyton feleslegesen a program újra és újra. Ez így most elvileg memory leaket fog csinálni (persze itt most ez rohadtul nem számít gyakorlatilag).
Többiektől kérdezem: vagy ezt még megoldja a garbage collector?










C#-ban nincs olyan, hogy memory leak.
Azokat az objektumokat, amikre nincs referencia a GC előbb utóbb felszabadítja.
Ettől függetlenül Randomból egy közöset érdemes használni mindenre.





"C#-ban nincs olyan, hogy memory leak."
Nem vagyok egy expert, de nagyon egyszerűen tudnék neked memory leaket írni szándékosan.
Van itt is memóriaszivárgás, csak ebben az esetben nem tudom, hogy megoldaná e a GC (valószínűleg igen).
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, 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!