آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

فورس کلوز دادن برنامه(حل شد)

ramin301  11 سال پیش  11 سال پیش
0 0

سلام دوستان این کد که مربوط به پروژه ی Tic tac Toe  از آموزش  فصل هفتم هست وقتی که کد checkWin  رو می نویسم فورس کلوز میده

هر چری فکر کردم خودم نتونستم دلیلش رو بدونم اگر ممکن هست شما من رو راهنمایی کنید.

 package saramin.app.tic_tac_toe;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;


public class TicTacTotActivity extends Activity {

    public ImageView[] images    = new ImageView[9];
    public boolean     playerOne = true;            
    public Byte[][]    cells     = new Byte[3][3];  


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        images[0] = (ImageView) findViewById(R.id.img1);
        images[1] = (ImageView) findViewById(R.id.img2);
        images[2] = (ImageView) findViewById(R.id.img3);
        images[3] = (ImageView) findViewById(R.id.img4);
        images[4] = (ImageView) findViewById(R.id.img5);
        images[5] = (ImageView) findViewById(R.id.img6);
        images[6] = (ImageView) findViewById(R.id.img7);
        images[7] = (ImageView) findViewById(R.id.img8);
        images[8] = (ImageView) findViewById(R.id.img9);

        OnClickListener imageClickListener = new OnClickListener() {

            @Override
            public void onClick(View view) {

                ImageView imageView = (ImageView) view;

                int tag = (Integer) imageView.getTag();
                int row = (int) Math.floor(tag / 3);
                int col = tag % 3;

                if (playerOne) {
                    imageView.setImageResource(R.drawable.circle);
                    cells[row][col] = 1;
                } else {
                    imageView.setImageResource(R.drawable.cross);
                    cells[row][col] = 2;
                }
                checkWin();
                playerOne = !playerOne;   
            }
        };

        for (int i = 0; i < 9; i++) {
            images[i].setTag(i);
            images[i].setOnClickListener(imageClickListener);
        }
    }


    public void checkWin() {
        for (int i = 0; i < 3; i++) {
            if (cells[i][0] != 0 && cells[i][0] == cells[i][1] && cells[i][1] == cells[i][2]) {
                Log.i("LOG", "Player " + cells[i][0] + "Win");
            }
        }
    }
}

 

اینم اروری هست که eclips نشون میده

پی نوشت:

این متن رو دقیقا استاد تا همینجا می نویسند و تست می کنند ولی برای من فورس کلوز میده ولی برای استاد کوچکترین مشکلی ندارد. 

البته در کد من با گذاشته یک return در حلقه آخر for مشکل حل میشه ولی من اصلا نمیتونم درکش کنم . دوستان هم توضیح دادن ولی باز درک نکردم. اگه توضیحات دوستان هم درست باشد خب کاملا مشخص است که برای استاد هم که  تا همینجا نوشتن و امتحان کردن باید فورس کلوز میداده که نداده است.

0 0
ببخشید دوست عزیز این کل سورس برنامه TicTacToe هست ؟ (11 سال پیش)
0 0
نه کلش نیست تا همینجا می نویستم و تست می کنم فورس کلوز میده . (11 سال پیش)
0 0
ممکنه یکی از دوستان الان کمک ات کنه ولی اگه اون پروژه رو کامل برای من بفرستی زودی کمک ات میکنم ! توی یه سایت آپلود رایگان بگذار بعدش برای من لینک کن! (11 سال پیش)
0 0
البته کل پروژه رو میگم آپلود کن ها ! (11 سال پیش)
0 0
کل پروژه استاد رو آپلود کنم یا فقط کدش رو ارسال کنم؟ اگه کل پروژه رو میخواید خب از بخش مطالب آموزشی بخش هفتم می تونید دانلود کنید . چون شاید مشکل داشته باشه کل پروژه استاد رو اینجا آپلود کنم (11 سال پیش)
0 0
من الان بخش 11 آموزشات هستم اینارو 2 هفته پیش رد کردم ! میخوام مشکل شما رو حل کنم ! کل پروژه رو در یک فابل زیر آپلود کن تا من بتونم بهتر راهنمایی ات کنم ! منظورم کل کد هایی هست که شما نوشتی ! همین پروژه ای که خودت داری روش کار میکنی رو میخوام 1! (11 سال پیش)
0 0
چی شد داداش ؟ آپلود کردی پروژه رو ؟ (11 سال پیش)
 برای این سوال 4 پاسخ وجود دارد.
پاسخ به سوال 
ramin301  11 سال پیش
0 0

اینم کل پروژه تا اینجایی که نوشتم

لینک

0 0
برسی میکنم تا چند دقیقه دیگه بهت خبر میدم ! (11 سال پیش)
پاسخ به سوال 
Ghost  11 سال پیش
+2 0

یافتم !

اون آخرای کدتون رو نگاه کنید ! شما باید یه return اضافه کنید ! اینجوری باید باشه !

 public void checkWin() {
for (int i = 0; i < 3; i++) {
if (cells[i][0] != 0 && cells[i][0] == cells[i][1] && cells[i][1] == cells[i][2]) {
Log.i("LOG", "Player " + cells[i][0] + "Win");
}
return;
}

0 0
درست شد داداش ؟ الان بهتر نوشتم ! (11 سال پیش)
0 0
اره دقیقا درست شد؟ دلیلش رو میدونی چرا اینجوری شد از دید الگوریتمی منظورمه. (11 سال پیش)
0 0
اره دقیقا درست شد . دلیلش رو میدونی که چرا اینجوری شد؟ از دید الگوریتمی منظورمه ؟ (11 سال پیش)
+1 0
خب شما اگه return نزنی این حلقه for از کروشه ها میره بیرون ! شما باید نگه اش داری ! متوجه شدید ؟ (11 سال پیش)
0 0
نه والا اصلا متوجه نشدم. یعنی چی از کروشه میره بیرون؟ (11 سال پیش)
0 0
الانم دوباره فیلمی رو دیدم استاد هم return نذاشته بود (11 سال پیش)
0 0
الانم دوباره فیلمی رو دیدم استاد هم return نذاشته بود (11 سال پیش)
0 0
خیلی ساده هست ! شما اگه return نزنی این حلقه for شما میره بیرون از اون دوتا کروشه پایین! یه نگاهی به سورس خودت بندازه ! اون آخر شما 4 تا کروشه داری ! کروشه اول مال حلقه for هست و بعدیش مال if حالا شما باید به این حلقه for بگی متوقف شو و دیگه به کار خودت ادامه نده ! یعنی وقتی حلقه for کوچک تر از 3 شد دیگه به کار خودت ادامه نده ! اگه return نگذاری به کار خودش ادامه میده ! (11 سال پیش)
+2 0
اگر return نکنین میره توی یه اینفینیتی لوپ و کرش میکنه ! ( تا ابد توی کروشه میمونه و هیچ وقت نمیتونه خارج بشه! ) (11 سال پیش)
0 0
دوست عزیز گذاشتن اون return بعد از if کاملا اشتباه هستش چون باعث میشه فقط برای i=0 رو چک کنه و بعد از if کلا از حلقه خارج بشه و 1 و 2 رو چک نکنه . البته اگر return رو هم نذارم فورس کلوز میده واقعا موندم (11 سال پیش)
0 0
الان برسی میکنم ببینم چجوریه خبرش رو بهت میدم ! (11 سال پیش)
پاسخ به سوال 
Ghost  11 سال پیش
0 0

استاد return نگذاشته بود ؟! پس این چیه ؟

0 0
این در پروژه نهایی هست در فیلم پروژه که نگاه می کنید اصلا نمیذاره. حلقه for محدودش رو کامل مشخص کردیم دیگه تا برای i اعداد 0 و 1 و2 رو چک می کنه تموم شد دیگه کاری نداره دیگه . (11 سال پیش)
+1 0
استاد توی بخش 2 توضیح دادند ! اگه خواستی یه مراجعه بکن ! ولی دقیق یادم نیست کجاش ! شما وقتی حلقه for رو براش return نگذاری از بلاک for میزنه بیرون و میره تو بلاک if و...خیلی سادس ! (11 سال پیش)
0 0
ممنون دوست عزیزم . خیلی وقتت رو گرفتم من برم دوباره این بخشی رو که گفتی چک کنم (11 سال پیش)
+1 0
نه بابا خواهش میکنم ! یه بار دیگه ببین ولی در کل همین بود که من گفتم ! فکر کنم درست توضیح ندادم ! امیدوار ام موفق باشید! (11 سال پیش)
0 0
من رفتم دوباره توضیحات و استاد رو خوندم و پروژه رو دقیقا با استاد جلو اومدم ولی باز فورس کلوز میده (11 سال پیش)
0 0
اگه دقت کنی استاد هم داخل if از return استفاده کرده و اگر بعد از if هم از return استفاده کنیم اعلانا انگار با حلقه for شوخی کردیم و دیگه باقیه پارامترها رو اجرا نمیکنه. (11 سال پیش)
پاسخ به سوال 
Ghost  11 سال پیش
+3 0

یافتم !

یه نگاه به اون بالای کد ات بنداز ! byte رو با B بزرگ نوشتی ! درستش اینجوریه !

 public byte[][]    cells     =new byte[3][3];
0 0
درست شد ؟ اگه درست شد خبر بده ! دیگه باید درست شده باشه! (11 سال پیش)
0 0
وایییییییییییییییییییییییی اصلا باورم نمیشه همچنین مشکلی یک روزه من رو مشغول خودش کرده واقعا ممنون. از کجا تونستی بفهمی مشکل از اونجا بود؟ (11 سال پیش)
+3 0
از اون دم گرفتم اومدم پایین دیدم به جای primitiv یک کلاس درست کردی ! مثل Integer (11 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .