PDA

View Full Version : سوال: مشکل در پر کردن آرایه دو بعدی



kebriya
شنبه 11 اردیبهشت 1389, 12:52 عصر
من توی برنامم یه کلاس نوشتم به نام matrix که یه متغییر mat بصورت زیر تعریف شده:


int[,] mat=new int[3,3];


حالا یه کلاس دیگه که کار پشته رو واسم انجام میده یعنی یه آرایه از کلاس matrix و متدهای push , pop.
نمیدونم چرا وقتی push میکنم اطلاعات همه خونه های آرایه تغییر میکنه و همه به اطلاعات آخرین خونه تبدیل میشه. نمیدونم کجاشو خراب کردم که این مدلی میشه!
کد کلاس stack:


class stack
{
private matrix[] s=new matrix[1000];
private int top;

public stack()
{
top = 0;
}
public matrix pop(){
matrix x=new matrix ();
top--;
x = s[top];
return x;
}

public void push(matrix x)
{
s[top] = x;
top++;
}
public int empty()
{
if (top == 0)
return 1;
else
return 0;
}
}

saed2006
شنبه 11 اردیبهشت 1389, 12:56 عصر
چرا از stack خود vs استفاده نمیکنی

kebriya
شنبه 11 اردیبهشت 1389, 13:00 عصر
چرا از stack خود vs استفاده نمیکنی

چون می خوام matrix رو به آن push کنم ولی با stack خود vs نمیتونستم گیر میداد که باید object باشه

saed2006
شنبه 11 اردیبهشت 1389, 13:52 عصر
matrix هم object ]ست دیگه

mohammad meta
شنبه 11 اردیبهشت 1389, 13:55 عصر
فکر کنم اشکال از اینجا باشه

matrix x=new matrix ();

matrix x به صورت PUBLIC تعریف کن ببین درست می شه ؟
بعد داخل متد این بنویس
x=new matrix ();

mohsensaghafi
شنبه 11 اردیبهشت 1389, 14:53 عصر
سلام دوست عزیز
لطفا کد کلاس ماتریست رو هم بذار
شاید از اونجا باشه.

kebriya
شنبه 11 اردیبهشت 1389, 17:06 عصر
سلام دوست عزیز
لطفا کد کلاس ماتریست رو هم بذار
شاید از اونجا باشه.




class matrix
{
public int[,] mat=new int[3,3];
private int x, y;
private char pre_move;

public void setmove(char c)
{
pre_move=c;
}
public char getmove()
{
return pre_move;
}
public void setx(int x1)
{
x = x1;
}
public int getx()
{
return x;
}
public void sety(int y1)
{
y = y1;
}
public int gety()
{
return y;
}
}

Amir Oveisi
شنبه 11 اردیبهشت 1389, 19:00 عصر
دوست عزیز وقتی این قابلیت در خود دات نت وجود داره و برای شما کافیه دلیلی نداره که خودتون پیاده سازیش کنید.
برای استفاده از Stack در دات نت از کلاس Stack در فضای نام System.Collections.Generic استفاده کنید. شما میتونین موقع تعریف stack مشخص کنید که اعضای اون از چه نوعی باید باشه. کد زیر رو ببینید:

Stack<string> numbers = new Stack<string>();
numbers.Push("one");
numbers.Push("two");
numbers.Push("three");
numbers.Push("four");
numbers.Push("five");


برای pop کردن هم به این شکل:

string s = numbers.Pop();

حالا شما در برنامه خودتون کافیه به جای String (در این مثال) از نوع داده Matrix (یا هر نوع دیگه ای) که خودتون ساختید، استفاده کنید.

برای اطلاعات بیشتر لینک زیر رو ببینید:
http://msdn.microsoft.com/en-us/library/3278tedw.aspx

موفق باشید

mohsensaghafi
یک شنبه 12 اردیبهشت 1389, 13:34 عصر
سلام.
این خط رو داخل سازنده کلاست بذار ببین درست نمی شه.

public int[,] mat=new int[3,3];