بروز خطا
[message]
اشتراک در سوال
رای ها
[dataList]
مشکلی عجیب در برنامه ! ( حل شد )
سلام
از دیشب یه مشکلی عجیب در برنامم پیش اومده که هر چی فکر میکنم نمیدونم ایراد از کجاست ، دیگه دارم دیوانه میشم :
یه کلاسی دارم که دو Field داره ( دو ماتریس 2 * 2 ) :
public class Class1 extends ImageView {
private int[][] list = new int[2][2];
private int[][] oldList = new int[2][2];
و مانند پروژه استاد در Constructor اونو به initialize ارجاع دادم و در initialize ماتریس list رو مقدار دهی کردم ، و ماتریس oldList رو برابر ماتریس list قرار دادم . در آخر هم متد going رو صدا زدم :
public Class1(Context context) {
super(context);
initialize();
}
public Class1(Context context, AttributeSet attrs) {
super(context, attrs);
initialize();
}
public Class1(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initialize();
}
private void initialize() {
list[0][0] = 2;
list[0][1] = 4;
list[1][0] = 3;
list[1][1] = 7;
oldList = list;
going();
}
و در متد going مقدار oldList رو در Log نشون میدم و درست هم نشون میده . بعد میام ماتریس list رو تغییر میدم ، اما عجیب اینه که ماتریس oldList هم تغییر میکنه و وقتی نشونش میدم برابر list هست ، در صورتی که دیگه oldList رو مقدار دهی نکردم . مشکل چیه ؟
private void going() {
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
Log.i("Log", "oldList = " + oldList[i][j]);
}
}
Log.i("Log", "---------------------------");
list[0][0] = 0;
list[0][1] = 5;
list[1][0] = 0;
list[1][1] = 0;
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
Log.i("Log", "oldList = " + oldList[i][j]);
}
}
}
اینم نتیجه LogCat :
oldList = 2 oldList = 4 oldList = 3 oldList = 7 --------------------------- oldList = 0
oldList = 5 oldList = 0 oldList = 0
اینم کل کلاس :
package akbarzadeh.reza.test;
import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.ImageView;
public class Class1 extends ImageView {
private int[][] list = new int[2][2];
private int[][] oldList = new int[2][2];
public Class1(Context context) {
super(context);
initialize();
}
public Class1(Context context, AttributeSet attrs) {
super(context, attrs);
initialize();
}
public Class1(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initialize();
}
private void initialize() {
list[0][0] = 2;
list[0][1] = 4;
list[1][0] = 3;
list[1][1] = 7;
oldList = list;
going();
}
//========================== going method ====================
private void going() {
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
Log.i("Log", "oldList = " + oldList[i][j]);
}
}
Log.i("Log", "---------------------------");
// ------------------------------------------------------------
list[0][0] = 0;
list[0][1] = 5;
list[1][0] = 0;
list[1][1] = 0;
// ------------------------------------------------------------
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
Log.i("Log", "oldList = " + oldList[i][j]);
}
}
}
//============================================================
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
}
}
ممنون از پاسخگویی تون .
0
0
شما توی متد initialize گفتی oldList = list و توی قسمت going هر 2 باری که داری مقادیر رو چاپ میکنی داری oldList رو چاپ میکنی. در حقیقت لیست شما متفاوته، ولی توی چاپ کردنش چون کپی پیست کردی یادت رفته اسم هارو جابجا کنی. (10 سال پیش)
0
0
ببینید خوب من دقیقا میخوام هر دو بار oldList رو چاپ کنم ، ولی بین دو دستور Log که من oldList رو تغییر ندادم که متفاوت نشون میده ! (10 سال پیش)
0
0
لطفا کمک کنید ، هنوز نمیدونم مشکل چیه ! (10 سال پیش)
0
0
خوب دیباگ کنید ببینید وقتی لیست رو تغییر میدید چه کدهایی اجرا میشه و چرا oldList تغییر میکنه. (10 سال پیش)
0
0
میشه بگین وقتی Debug as میزنم بعد باید کجا رجوع کنم که ببینم چه کدی اجرا میشه ؟ توی ویژوال بیسیک که قبلا کار میکردم این قابلیت بود که خط به خط مراحل رو نشون میداد . اینم داره ؟ تو کدوم پنجره ست ؟ ممنون . (10 سال پیش)
0
0
من مدت هاست که دیگه از اکلیپس استفاده نمیکنم، ولی کار سختی نیست. یکم سرچ کنید راحت به نتیجه میرسید. اینم یه لینک مفید لینک (10 سال پیش)
0
0
ممنون حاج حسینی خیلی به دردم میخوره ، خوب بود ولی دقیقا نمیدونم باید چیکار کنم ، راه حل هاشو که دارم بررسی میکنم اونطور که خودشون میگن خط به خط نشون نمیده ، کسی اگه طرز کار Debug رو بلده بگه ، ممنون . (10 سال پیش)
برای این سوال پاسخی وجود ندارد.
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .