Kezdőoldal » Számítástechnika » Programozás » Mi a hiba a ciklussal? (C#)

Mi a hiba a ciklussal? (C#)

Figyelt kérdés

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


2011. okt. 29. 20:42
1 2 3 4
 1/34 _Jessy_ ***** válasza:
azért, mert az azonos változód mindig false marad. Az x pedig túlfut a tömb határán. Tegyél az azonos = true sorokhoz breakpointokat, és indítsd el. Gyanítom, hogy nem fog megállni... Szerintem a lapnev.Contains(lapokneve[x]) nem teljesül. Egyébként milyen típus a lapnev változód?
2011. okt. 29. 21:11
Hasznos számodra ez a válasz?
 2/34 A kérdező kommentje:
a feltételekkel nicns gond ezt az is jelzi ha nicns ott a a ciklus UTÁN h azonos=false; akkor simán lefut, és jó eredményt ad. Viszont a kövi while ciklushoz false ra kel álíltani azt a szerencsétlen változót :) A feltéelek jók, mert a programban korbban működtek. :) Tehát nem itt kell keresni a problémát. Valami más ötlet ugye van, mert nekem már nicsn ötletem :(
2011. okt. 29. 21:14
 3/34 _Jessy_ ***** válasza:
akkor mondom érthetően, vagy legalábbis megpróbálom. Van olyan eset, amikor az a szerencsétlen azonos változód a while cikluson belül nem kap true értéket, még mielőtt az x ne szaladna túl a lapokneve tömböd méretén. Ha ilyen eset nem lenne, akkor a hibát se kapnád. Debug módba, amikor leáll az exception miatt néz meg a változóid értékét! x, lapokneve hossza (gondolom ez 52), azonos (ez pedig false)
2011. okt. 29. 21:23
Hasznos számodra ez a válasz?
 4/34 A kérdező kommentje:

É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 :)

2011. okt. 29. 21:30
 5/34 _Jessy_ ***** válasza:

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.

2011. okt. 29. 21:39
Hasznos számodra ez a válasz?
 6/34 A kérdező kommentje:

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?

2011. okt. 29. 21:48
 7/34 _Jessy_ ***** válasza:
Ember! Értsd már meg, hogy a második while ciklusban valamiért az azonos változód NEM KAP true ÉRTÉKET!!! Ha kapna, akkor azon a részen is túljutna a programod anélül, hogy az x változód túlszaladna a tömb méretén
2011. okt. 29. 22:25
Hasznos számodra ez a válasz?
 8/34 _Jessy_ ***** válasza:

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

2011. okt. 29. 22:27
Hasznos számodra ez a válasz?
 9/34 A kérdező kommentje:
de akkro mér az elsőre ír hibát? és ha csak simán ctrl+c,v zztem akk meg mi lehet más?
2011. okt. 29. 22:27
 10/34 A kérdező kommentje:
mi a szintaktikája annaka breakpoint nak?
2011. okt. 29. 22:31
1 2 3 4

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!