Mi a hiba a ciklussal? (C#)
A ciklus után, az azonos változót isét false-ra álíltom, és ienkor azt modnja, hogy tullépi a töm méretét az x változó. De mért? az x et a a ciklus elött lenullzom és a ciklus után ciklustól már függetlenül változtatom visza az azonos változó értékét false ra. :S iért képit túl a töm értékét akkor? ha meg nem állítom false ra az értékét akkor meg rosszul számol mert a while másodszorra nem tud lefutni, rendesen. mert ezután egy ugyan ilyen while jönne, aminek ez a feltétele, hogy false legyen az aváltozó. Bármi ötlet, hogy ez hogy lehetséges? Mert ahogy én néztem cikls után van nem zavarhatna be a változó átírása. :S Ez a kód:
x = 0;
while (azonos == false)
{
if (lapnev.Contains(lapokneve[x]))
{
ertek = x;
if (x == 12 || x == 25 || x == 38 || x == 51)
{
if (bankpontja + 11 <= 21)
{
bankpontja += 11;
azonos = true;
}
else
{
bankpontja++;
azonos = true;
}
}
else if (x == 8 || x == 9 || x == 10 || x == 11 || x == 21 || x == 22 || x == 23 || x == 24 || x == 34 || x == 35 || x == 36 || x == 37 || x == 47 || x == 48 || x == 49 || x == 50)
{
bankpontja += 10;
azonos = true;
}
else
{
bankpontja += ertek + 2;
}
}
x++;
}
v = veletlentomb[1];
lapnev = elolap.Images.Keys[v];
azonos = false;
x = 0;
Köszönöm előre
Értettem mit mondtál :) de én meg azért tudom, hogy ture t kap mert ez most azt csinálja, hogy a lapnev elmenti egy lapnak a fájlnevét, egygy képet. pl pikk3.png a lapok neve egy tömb amibe benne van a "2","3"...."király","ász" az x ezeken megy végig :) mint látod, az első if az az ászokat, jelöli :), tehát ha 12,25,38,51 akkor az ász lesz
ha valamelyik 10 értékű lap(10,jumbo,dáma,király) akk ott az a sok x es feltétel rá, az az ÖSSZESET jelöli :)
És a végén az else pedig a maradék lapot jelöli.Tehát ha valameik feltételbe ki si maradt ovlan ple gy ász vagy egy tizes értékű lap akk a MARADÉk rész elintézi azt is, csak rosszul számolna. DE Ez a while működik! Jól számol hibátlanul megy. CSAK amikro berakom a ciklus UTÁN, tehát ciklusnak köze nincs hozzá(szerintem) ott ugye false ra álíltom, hogy a következő ciklus mehessen. De a program erre a ciklusra ír hibát, pontosabban erre a sorra:if (lapnev.Contains(lapokneve[x]))
De ha nem álíltom false-ra akkor(azonos = false;) akkor megy rendesen. :) eből gondolom, hogy az azonos mindig true ra változik valahol. :) Gondolom sokat nem tudtál a progi részleteirőúl így érthető, hogy nem láttad át. De ígyhogy elmondtam, hogy mik a részletek, így is az eddigi véleméyeden vagy? Mert ha igen megnézem szívesen, elvégre nekem nicsn semmi ötletem már. De ha van más ötleted azt is szívesen hallgatom, persze az eddigi fáradozásaidat is köszönöm :)
1. eset: második kör előtt nem állítiod false-ra az azonos-t
első körben megkapja az igaz értéket, második körben el sem indul a while ciklus, mivel az azonos még mindig true (nem a második körben lefutó while ciklusban állítódott át!!!! hanem még az elsőben)
2. eset: false-ra állítod, így második körben is belemegy a while ciklusba, de itt már nem kap sehol true értéket!!! lapnev = elolap.Images.Keys[v]; nem lehet, hogy a random kiválasztás után a lapnev == "" (feltételezem string)??? Mert ez esetben a lapnev.Contains(lapokneve[x]) soha nem lesz igaz, így esély nincs rá, hogy az azonos true értéket kapjon.
private void megallok_Click(object sender, EventArgs e)
{
lapok[0].Image = elolap.Images[bank_elso_lapja];
lapnev = elolap.Images.Keys[bank_elso_lapja];
x = 0;
while (azonos == false)
{
if (lapnev.Contains(lapokneve[x]))
{
ertek = x;
if (x == 12 || x == 25 || x == 38 || x == 51)
{
if (bankpontja + 11 <= 21)
{
bankpontja += 11;
azonos = true;
}
else
{
bankpontja++;
azonos = true;
}
}
else if (x == 8 || x == 9 || x == 10 || x == 11 || x == 21 || x == 22 || x == 23 || x == 24 || x == 34 || x == 35 || x == 36 || x == 37 || x == 47 || x == 48 || x == 49 || x == 50)
{
bankpontja += 10;
azonos = true;
}
else
{
bankpontja += ertek + 2;
}
}
x++;
}
v = veletlentomb[1];
lapnev = elolap.Images.Keys[v];
azonos = false;
x = 0;
while (azonos == false)
{
if (lapnev.Contains(lapokneve[x]))
{
ertek = x;
if (x == 12 || x == 25 || x == 38 || x == 51)
{
if (bankpontja + 11 <= 21)
{
bankpontja += 11;
azonos = true;
}
else
{
bankpontja++;
azonos = true;
}
}
else if (x == 8 || x == 9 || x == 10 || x == 11 || x == 21 || x == 22 || x == 23 || x == 24 || x == 34 || x == 35 || x == 36 || x == 37 || x == 47 || x == 48 || x == 49 || x == 50)
{
bankpontja += 10;
azonos = true;
}
else
{
bankpontja += ertek + 2;
}
}
x++;
}
bankpontjai.Text = "Bank pontja: " + bankpontja;
}
EZ az egész kód :)
itt ugye elmenti a lapnev be a lap nevét és lenullázza az x et.
aztán whileciklus elindul jó értéket ad. (most úgy mondom, hogy nem állítom vissza false ra)
nsot lemegy az első ciklsu jól. és jó értéket ad. pl 2 es a lap akkor 2-t de a második ciklusle se fut mert ugye false kéne, hogy legyen. tehát kijön egy 2 és egy 10 es akk amrad 2 a tizest nem veszi figyelembe. tehát midnenképp át kéen állítanom false ra azta változót h a második false is lefuthasson. Nos hogy az errea részre vontkozó teljes kódot, láttad, így akkor mit javasolsz mit tegyek?
lapnev = elolap.Images.Keys[v];
ez után a sor után rakj egy breakpoint-ot, és nézd meg mi a lapnev változód értéke
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!