بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

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

مدیریت گفتگو
ramin301 11 سال پیش
آخرین تغییر: 11 سال پیش

سلام دوستان این کد که مربوط به پروژه ی 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 مشکل حل میشه ولی من اصلا نمیتونم درکش کنم . دوستان هم توضیح دادن ولی باز درک نکردم. اگه توضیحات دوستان هم درست باشد خب کاملا مشخص است که برای استاد هم که  تا همینجا نوشتن و امتحان کردن باید فورس کلوز میداده که نداده است.

نظرات

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

پاسخ‌ها 4

ramin301 11 سال پیش

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

لینک

نظرات

Ghost 11 سال پیش
برسی میکنم تا چند دقیقه دیگه بهت خبر میدم !
Ghost 11 سال پیش

یافتم !

اون آخرای کدتون رو نگاه کنید ! شما باید یه 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;
}

نظرات

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

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

نظرات

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

یافتم !

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

 public byte[][]    cells     =new byte[3][3];

نظرات

Ghost 11 سال پیش
درست شد ؟ اگه درست شد خبر بده ! دیگه باید درست شده باشه!
ramin301 11 سال پیش
وایییییییییییییییییییییییی اصلا باورم نمیشه همچنین مشکلی یک روزه من رو مشغول خودش کرده واقعا ممنون. از کجا تونستی بفهمی مشکل از اونجا بود؟
Ghost 11 سال پیش
از اون دم گرفتم اومدم پایین دیدم به جای primitiv یک کلاس درست کردی ! مثل Integer

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