Mi a hiba a kóddal? (C#)
public partial class Form1 : Form
{
int[] Xp = { 12, 112, 212, 312, 412 };
int[] Yp = { 12, 112, 212, 312, 412,512};
int[] Yr = new int[20];
int[] Xr = new int[20];
Random X = new Random();
Random Y = new Random();
Point kep;
int sorszam=0;
int xk, xj,yk, yj = 0;
PictureBox[] kepdoboz = new PictureBox[20];
ImageList[] keplista = new ImageList[10];
int z = 0;
public void KepLerakasX()
{
for (int i = 0; i < 20; i++)
{
sorszam = X.Next(0, 5);
while (xk < xj && Xr[xk] != Xp[sorszam])
{
xk++;
}
if (xk < xj)
{
kep.X = Xp[sorszam];
Xr[xj] = kep.X;
xj++;
}
else KepLerakasX();
kepdoboz[i] = new PictureBox();
kepdoboz[i].Parent = Form1.ActiveForm;
kepdoboz[i].Location=new Point(kep.X,0);
kepdoboz[i].Size=new Size(100,100);
kepdoboz[i].Visible=true;
}
}
public void KepLerakasY()
{
for (int i = 0; i < 20; i++)
{
sorszam = Y.Next(0, 5);
while (yk < yj && Yr[yk] != Yp[sorszam])
{
yk++;
}
if (yk < yj)
{
kep.Y = Yp[sorszam];
Yr[yj] = kep.Y;
yj++;
}
else KepLerakasY();
keplista[i] = new ImageList();
kepdoboz[i].Location = new Point(kep.X, kep.Y);
if (z == 10)
{
z = 0;
}
else z++;
}
}
public Form1()
{
InitializeComponent();
}
private void timer1_Tick(object sender, EventArgs e)
{
}
private void Form1_Load(object sender, EventArgs e)
{
KepLerakasX();
KepLerakasY();
}
private void button1_Click(object sender, EventArgs e)
{
}
}
A futtatásnál ezt a hibát írja ki:
An unhandled exception of type 'System.StackOverflowException' occurred in mscorlib.dll
erre a sorra--->sorszam = X.Next(0, 5);
A kód 20 pictureboxot hozna létre és rakna le elvileg "kisorsolt" koordinátára.
imho van benne egy csunya rekurzio, ami szepen felzabalja a stacket...
a while egyik kilepesi feltetele, hogy xk legyen nagyobb vagy egyenlo xj-vel, az utana jovo if else-agaban van egy rekurziv hivas, de mivel xk es xj globalis, igy az ertekuket megtarjak, ergo a while-ba be sem mennek, egybol jon ujra az if else aga, es az ordogi kor...
ha jol latom, 30 koordinatad van... nem lenne egyszerubb egy ilyen megoldas?
veszel egy 20 elemu int tombot, amit feltoltesz 0-29 kozti veletlen szamokkal, ugy, hogy ellenorzod, az epp kisorsolt szam szerepel-e a tombben mar. majd vegigmesz ezen a tombon, es meghatarozod a koordintakat az elmentett szam alapjan (x=szam/6 es y=szam%6 muveletekkel), es az igy nyert koordinatakra teszed a pictureboxot.
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!