jannatmakan
سه شنبه 27 فروردین 1392, 00:44 صبح
با عرض سلام؛
بنده می خواستم آرایه ای دو بعدی از node ها ایجاد کنم. پس طبیعتاً ابتدا کلاسی به نام bstnode.cs ایجاد کردم بدین صورت:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
namespace tree
{
class bstnode
{
public int[] gn=new int[8];
public int[] hn=new int[8];
public string name;
public bstnode[] child=new bstnode[8];
public bstnode()
{
int i;
for (i = 0; i < 8; i++)
{
gn[i] = 0;
hn[i] = 0;
}
}
}
}
و سپس یک کلاس bst.cs ایجاد کردم بدین صورت:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace tree
{
class bst
{
public void create(int h, int w)
{
int i, j;
Random r = new Random();
bstnode[,] map = new bstnode[h, w]; ///////My Problem
for (i = 0; i < h; i++)
{
for (j = 0; j < w; j++)
{
map[i, j].name = "City " + i.ToString() + " , " + j.ToString();
if (i - 1 >= 0)
{
map[i, j].gn[0] =r.Next(50, 300);
map[i, j].hn[0] =r.Next(map[i, j].gn[0] - 70, map[i, j].gn[0]);
}
if (i - 1 >= 0 && j + 1 < w)
{
map[i, j].gn[1] = r.Next(50, 300);
map[i, j].hn[1] = r.Next(map[i, j].gn[1] - 70, map[i, j].gn[1]);
}
if (j + 1 < w)
{
map[i, j].gn[2] = r.Next(50, 300);
map[i, j].hn[2] = r.Next(map[i, j].gn[2] - 70, map[i, j].gn[2]);
}
if (i + 1 < h && j + 1 < w)
{
map[i, j].gn[3] = r.Next(50, 300);
map[i, j].hn[3] = r.Next(map[i, j].gn[3] - 70, map[i, j].gn[3]);
}
if (i + 1 < h)
{
map[i, j].gn[4] = r.Next(50, 300);
map[i, j].hn[4] = r.Next(map[i, j].gn[4] - 70, map[i, j].gn[4]);
}
if (i + 1 < h && j - 1 >= 0)
{
map[i, j].gn[5] = r.Next(50, 300);
map[i, j].hn[5] = r.Next(map[i, j].gn[5] - 70, map[i, j].gn[5]);
}
if (j - 1 >= 0)
{
map[i, j].gn[6] = r.Next(50, 300);
map[i, j].hn[6] = r.Next(map[i, j].gn[6] - 70, map[i, j].gn[6]);
}
if (i - 1 >= 0 && j - 1 >= 0)
{
map[i, j].gn[7] = r.Next(50, 300);
map[i, j].hn[7] = r.Next(map[i, j].gn[7] - 70, map[i, j].gn[7]);
}
}
}
}//End create
/*public void preorder(bstnode t, ListBox id, ListBox name)
{
if (t != null)
{
id.Items.Add(t.gn);
name.Items.Add(t.name);
preorder(t.left, id, name);
preorder(t.right, id, name);
}
}
public void inorder(bstnode t, ListBox id, ListBox name)
{
if (t != null)
{
inorder(t.left, id, name);
id.Items.Add(t.gn);
name.Items.Add(t.name);
inorder(t.right, id, name);
}
}
public void postorder(bstnode t, ListBox id, ListBox name)
{
if (t != null)
{
postorder(t.left, id, name);
postorder(t.right, id, name);
id.Items.Add(t.gn);
name.Items.Add(t.name);
}
}
public Boolean insert(int x, string n)
{
bstnode cur = root;
if (root == null)
{
root = new bstnode(x, n);
return root != null;
}
for (; ; )
{
if (x <= cur.gn)
{
if (cur.left != null)
{
cur = cur.left;
}
else
{
cur.left = new bstnode(x, n);
return cur.left != null;
}
}
else
{
if (cur.right != null)
{
cur = cur.right;
}
else
{
cur.right = new bstnode(x, n);
return cur.right != null;
}
}
}
}//end insert*/
}
}
و سپس به وسیله ی دو تکست باکس طول و عرض آرایه رو گرفتم و در رویداد کلیک btncreate این کد رو نوشتم:
private void btncreate_Click(object sender, EventArgs e)
{
int row, col;
row=Convert.ToInt32(txtheight.Text);
col=Convert.ToInt32(txtwidth.Text);
bs.create(row, col);
}//End btncreate
برنامه اجرا می شه، امّا هنگامی که می خوام از اشیاء آرایه استفاده کنم، خطا می ده و به عبارتی دیگر کاملاً واضحه که اون قسمت از کدی که با کلمه ی My Problem مشخص کردم، آرایه ای دو بعدی از اشیاء رو به درستی Create نمی کنه!
بنده می خواستم آرایه ای دو بعدی از node ها ایجاد کنم. پس طبیعتاً ابتدا کلاسی به نام bstnode.cs ایجاد کردم بدین صورت:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
namespace tree
{
class bstnode
{
public int[] gn=new int[8];
public int[] hn=new int[8];
public string name;
public bstnode[] child=new bstnode[8];
public bstnode()
{
int i;
for (i = 0; i < 8; i++)
{
gn[i] = 0;
hn[i] = 0;
}
}
}
}
و سپس یک کلاس bst.cs ایجاد کردم بدین صورت:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace tree
{
class bst
{
public void create(int h, int w)
{
int i, j;
Random r = new Random();
bstnode[,] map = new bstnode[h, w]; ///////My Problem
for (i = 0; i < h; i++)
{
for (j = 0; j < w; j++)
{
map[i, j].name = "City " + i.ToString() + " , " + j.ToString();
if (i - 1 >= 0)
{
map[i, j].gn[0] =r.Next(50, 300);
map[i, j].hn[0] =r.Next(map[i, j].gn[0] - 70, map[i, j].gn[0]);
}
if (i - 1 >= 0 && j + 1 < w)
{
map[i, j].gn[1] = r.Next(50, 300);
map[i, j].hn[1] = r.Next(map[i, j].gn[1] - 70, map[i, j].gn[1]);
}
if (j + 1 < w)
{
map[i, j].gn[2] = r.Next(50, 300);
map[i, j].hn[2] = r.Next(map[i, j].gn[2] - 70, map[i, j].gn[2]);
}
if (i + 1 < h && j + 1 < w)
{
map[i, j].gn[3] = r.Next(50, 300);
map[i, j].hn[3] = r.Next(map[i, j].gn[3] - 70, map[i, j].gn[3]);
}
if (i + 1 < h)
{
map[i, j].gn[4] = r.Next(50, 300);
map[i, j].hn[4] = r.Next(map[i, j].gn[4] - 70, map[i, j].gn[4]);
}
if (i + 1 < h && j - 1 >= 0)
{
map[i, j].gn[5] = r.Next(50, 300);
map[i, j].hn[5] = r.Next(map[i, j].gn[5] - 70, map[i, j].gn[5]);
}
if (j - 1 >= 0)
{
map[i, j].gn[6] = r.Next(50, 300);
map[i, j].hn[6] = r.Next(map[i, j].gn[6] - 70, map[i, j].gn[6]);
}
if (i - 1 >= 0 && j - 1 >= 0)
{
map[i, j].gn[7] = r.Next(50, 300);
map[i, j].hn[7] = r.Next(map[i, j].gn[7] - 70, map[i, j].gn[7]);
}
}
}
}//End create
/*public void preorder(bstnode t, ListBox id, ListBox name)
{
if (t != null)
{
id.Items.Add(t.gn);
name.Items.Add(t.name);
preorder(t.left, id, name);
preorder(t.right, id, name);
}
}
public void inorder(bstnode t, ListBox id, ListBox name)
{
if (t != null)
{
inorder(t.left, id, name);
id.Items.Add(t.gn);
name.Items.Add(t.name);
inorder(t.right, id, name);
}
}
public void postorder(bstnode t, ListBox id, ListBox name)
{
if (t != null)
{
postorder(t.left, id, name);
postorder(t.right, id, name);
id.Items.Add(t.gn);
name.Items.Add(t.name);
}
}
public Boolean insert(int x, string n)
{
bstnode cur = root;
if (root == null)
{
root = new bstnode(x, n);
return root != null;
}
for (; ; )
{
if (x <= cur.gn)
{
if (cur.left != null)
{
cur = cur.left;
}
else
{
cur.left = new bstnode(x, n);
return cur.left != null;
}
}
else
{
if (cur.right != null)
{
cur = cur.right;
}
else
{
cur.right = new bstnode(x, n);
return cur.right != null;
}
}
}
}//end insert*/
}
}
و سپس به وسیله ی دو تکست باکس طول و عرض آرایه رو گرفتم و در رویداد کلیک btncreate این کد رو نوشتم:
private void btncreate_Click(object sender, EventArgs e)
{
int row, col;
row=Convert.ToInt32(txtheight.Text);
col=Convert.ToInt32(txtwidth.Text);
bs.create(row, col);
}//End btncreate
برنامه اجرا می شه، امّا هنگامی که می خوام از اشیاء آرایه استفاده کنم، خطا می ده و به عبارتی دیگر کاملاً واضحه که اون قسمت از کدی که با کلمه ی My Problem مشخص کردم، آرایه ای دو بعدی از اشیاء رو به درستی Create نمی کنه!