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

(دوستان لطفا راهنمایی کنین)اشکال دربرنامه نویسی بازی  Hangman

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

باعرض سلام خدمت کلیه دوستان

بازی hangmanراتا اخر نوشتم و به مشکل برخوردم وبرنامه کرش می کنه.حروفی که غلط هست رانمایش نمیده ولی حروف صحیح  را نمایش میده.

لینک دانلود سورس را گذاشتم

لطفا راهنمایی کنین .

باتشکر

http://cdn.persiangig.com/download/1FY6pw/dl

نظرات

HoCoder 10 سال پیش
بهتر بود شات از لاگ برنامه میذاشتی که حصوله خوندن کد داره یه شات از لاگ کت بزار تا ببینیم که علت کرش چیه
Hojat13 10 سال پیش
شات لاگ کت را گذاشتم.
HoCoder 10 سال پیش
خط 84 برنامت مشکل داره اونجایی که تو لاگ کت نام پکیجت رو نوشته کلیک کن مستقیم میری رو خطی که خطا داره و این چیزی که من فهمیدم داری مقداری که داخل آرایه نیست رو میخونی که همچین اندیسی تو آرایه وجود نداره. مطمئن نیستم یه چک بکنید
Criss 10 سال پیش
توی خط 84 شما دارید یک Index از آرایه رو میگیرید که از تعداد اون آرایه بیشتر هست
Hojat13 10 سال پیش
دوستان مشکلم حل نشد.چطوری می تونم سورس کدش را اپلود کنم؟
HoCoder 10 سال پیش
کد خودتون رو با سورس کد استاد مقایسه کنید و میتونید این کد رو تو یه سرور رایگان مثل پرشین گیگ و پیکوفایل upload کنید و لینکش رو بدید به دوستان
Hojat13 10 سال پیش
لینک دانلود سورس را قرار دادم.لطفا راهنمایی کنین.
Hojat13 10 سال پیش
دوستان لطفا راهنمایی کنین

پاسخ‌ها 2

HoCoder 10 سال پیش

سلام

من کد شما اول تست نکردم و کد رو کمی اصلاح کردم و تست هم شده ازش استفاده کنید

 public class MainActivity extends Activity {

public String[] words = {
"hello" ,
"goodbye" ,
"bycicle" ,
"massage" ,
"hangman"
};

public String currentWord;

public TextView txtDashes;
public TextView txtWrong;

public Button btnNewGuess;

public ArrayList<Button> invisibleButton = new ArrayList<Button>();

public int nWrong;
public int nCorrect;

@Override
protected void onCreate( Bundle savedInstanceState ) {
super.onCreate( savedInstanceState );
setContentView( R.layout.main );

txtDashes = (TextView) findViewById( R.id.txtDashes );
txtWrong = (TextView) findViewById( R.id.txtWrong );

btnNewGuess = (Button) findViewById( R.id.btnNewGuess );

btnNewGuess.setOnClickListener( new OnClickListener() {

@Override
public void onClick( View v ) {
resetGame();
}
} );

resetGame();

}

public void resetGame() {
int randomNumber = (int) ( Math.random() * words.length );
currentWord = words[randomNumber].toLowerCase();

String dashes = "";
String spaces = "";

for ( int i = 0 ; i < currentWord.length() ; i++ ) {
dashes += "-";
spaces += " ";
}

txtDashes.setText( dashes );
txtWrong.setText( spaces );

for ( Button btn : invisibleButton ) {
btn.setVisibility( View.VISIBLE );
}

invisibleButton.clear();

nCorrect = 0;
nWrong = 0;
}

public void letterOnClickListener( View view ) {
Button btn = (Button) view;

btn.setVisibility( View.INVISIBLE );
invisibleButton.add( btn );

char letter = btn.getText().toString().toLowerCase().toCharArray()[0];

if (currentWord.contains( "" + letter )) {
char[] dashesArray = txtDashes.getText().toString().toCharArray();
char[] charArray = currentWord.toCharArray();
for ( int i = 0 ; i < charArray.length ; i++ ) {
if (charArray[i] == letter) {
dashesArray[i] = letter;
nCorrect++;
}
}

txtDashes.setText( new String( dashesArray ) );

if (nCorrect == currentWord.length()) {
Toast.makeText( MainActivity.this , "You Win!" , Toast.LENGTH_SHORT ).show();
resetGame();
return;
}
} else {

if (nWrong >= currentWord.length() - 1) {
Toast.makeText( MainActivity.this , "You lose!" , Toast.LENGTH_SHORT ).show();
resetGame();
return;
}

char[] charArray = txtWrong.getText().toString().toCharArray();
charArray[nWrong] = letter;
txtWrong.setText( new String( charArray ) );
nWrong++;
}

}
}

نظرات

Hojat13 10 سال پیش
سلام. دوست عزیز سورس کد استاد هم مشابه سورس کد شماست و عمل هم می کنه ولی برا من تا همون مرحله بیشتر جواب نمی ده .حتی یه دفعه دیگه هم نوشتم.اگه محبت کنین سورس کد خودم رابررسی کنین ممنون میشم.
HoCoder 10 سال پیش
دوست عزیز برنامه شما به این دلیل خطا میده که شما یک if برا چک کردن تعداد خطاهای کاربر نذاشتین و اگه تعداد خطا ها زیاد بشه چون توی charrArray اون اندیس وجود نداره کرش میکنه
Hojat13 10 سال پیش
اون ifراهم گذاشتم ولی درست نشد .تو فیلم آموزشی استاد تا قبل از اینکه ifبگذارن کار می کنه ونیازی به if نیست ولی منif راهم گذاشتم ولی حل نشد.
HoCoder 10 سال پیش
به نظر من شما کد رو کامل بنویسید و بعد دوباره بررسی کنید و کد رو پاک کنید و دوباره بنویسید اینطوری کاملا برنامه رو میفهمین. کد شما هم مشکلی بیشتر از این من نتونستم داخلش پیدا کنم
Hojat13 10 سال پیش
ممنون لطف کردین
Reza 10 سال پیش

سلام

    کل مشکل به خاطر این بود که برنامت یه فاصله کم داشت ، از روی Log میتونستی بفهمی ، گفته که در خط 103 خطای اندیس داری :

 chararray[nwrong] = letter;

    chararray طولش صفره ، و شما اندیس صفرم رو میخواید . چرا طولش صفره ؟ چون مقدار string خالیه و string هم همون مقدار txtwrong هست :

 String string = txtwrong.getText().toString();
char[] chararray = string.toCharArray();

حالا txtwrong چرا خالیه چون اون بالا در متغییر spaces یه فاصله کم گذاشتی و طولش صفر شده

اصلاح شده :

نظرات

Hojat13 10 سال پیش
داداش خیلی ممنون.واقعا لطف کردی.

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