سلام دوستان
من در حال یادگیری زبان برنامه نویسی جاوا هستم
در فصل شش آموزش یادگیری جاوا و در بخش
استفاده از کلاس رندوم جاوا در حلقه ها در قالب پروژه ی برادر بدشانس
من یک مشکل با مقدار متغیر keyvanNumber و abolfazlNumber دارم که چند ساعته وقت من را گرفته (این نام ها با نام های استفاده شده در آموزش متفاوت است)
کدی که من نوشته ام به صورت زیر است:
import java.util.Random;
public class hhh {
public static void main(String[] args) {
Random randomNumber = new Random();
// randomNumber.nextInt(101); i think this code is not useful
int keyvanNumber;
int abolfazlNumber;
for (keyvanNumber = randomNumber.nextInt(11) , abolfazlNumber = randomNumber.nextInt(11); keyvanNumber <=20 || abolfazlNumber <=20; keyvanNumber += randomNumber.nextInt(11) , abolfazlNumber += randomNumber.nextInt(11)) {
System.out.println("keyvan number is " + keyvanNumber + " and abolfazl number is " + abolfazlNumber );
}
System.out.println(keyvanNumber); // i think this app have some problem because keyvanNumber in line 11 is different with keyvanNumber in line 9 and 15
System.out.println(abolfazlNumber);
if (keyvanNumber > abolfazlNumber) {
System.out.println("keyvan won the game and abolfazl has to buy it.");
} else if (keyvanNumber < abolfazlNumber) {
System.out.println("abolfazl won the game and keyvan has to buy it.");
} else {
System.out.println("now they have to think about a third solution!");
}
System.out.println(keyvanNumber);
System.out.println(abolfazlNumber);
}
}
این برنامه قراره برای دو نفر به صورت تصادفی یک عدد از یک تا ده در نظر بگیره و تا زمانی که هر دو عدد زیر 20 هستند اعدادی تصادفی بین یک تا ده بهشون اضافه کنه تا بزرگتر از 20 شوند
خروجی این برنامه در کنسول این است
keyvan number is 8 and abolfazl number is 8
keyvan number is 16 and abolfazl number is 13
keyvan number is 24 and abolfazl number is 19
24
25
abolfazl won the game and keyvan has to buy it.
24
25
البته باید چندین بار این برنامه را اجرا کنید تا جواب غلطی مثل گزینه بالا به شما بدهد
پس از دستور for من پنج جا از متغیر keyvanNumber ( در خط 9 و 11 و 13 و15 و 21 ) استفاده کرده ام در حالی که مقدار این متغیر در خط 9 یک مقدار است ولی در خط 11 و 13 و15 و 21 یک مقدار دیگر است
در بخش کنسول این مشکل خودش را نشان داده و با اینکه نوشته مقدار کیوان برابر 24 است و مقدار ابوالفضل برابر 19 است اما ابوالفضل را برنده اعلام کرده است در حالی که کیوان باید برنده باشد (در واقع مقدار کیوان در دستور if با دستور system.out.println... که در لوپ for قرار دارد متفاوت است در حالی که هر دو این دستورات پس از دستور for آمده اند و باید مقدارشان ثابت باشد
آیا این مشکل من با این حرف که کد ها خط به خط اجرا میشن در تضاد نیست و آیا نباید وقتی یک متغیر در چند خط بعد فرا خوانده میشه آخرین وضعیت متغیر (منظورمی آخرین تغیراتی است که روی متغیر شده)فراخوانده بشه
همچنین این مشکل هنگام استفاداه از لوپ while به هیچ وجه وجود ندارد
اینم همون برنامه منتها وقتی از دستور while استفاده کرده ام
import java.util.Random;
public class ccc {
public static void main(String[] args) {
Random randomNumber = new Random();
// randomNumber.nextInt(101); i think this code is not useful
int keyvanNumber = randomNumber.nextInt(11);
int abolfazlNumber = randomNumber.nextInt(11);
while (keyvanNumber <=20 || abolfazlNumber <=20) {
keyvanNumber += randomNumber.nextInt(11);
abolfazlNumber += randomNumber.nextInt(11);
System.out.println("keyvan number is " + keyvanNumber + " and abolfazl number is " + abolfazlNumber );
}
System.out.println(keyvanNumber); // i think this app have some problem because keyvanNumber in line 11 is different with keyvanNumber in line 9 and 15
System.out.println(abolfazlNumber);
if (keyvanNumber > abolfazlNumber) {
System.out.println("keyvan won the game and abolfazl has to buy it.");
} else if (keyvanNumber < abolfazlNumber) {
System.out.println("abolfazl won the game and keyvan has to buy it.");
} else {
System.out.println("now they have to think about a third solution!");
}
System.out.println(keyvanNumber);
System.out.println(abolfazlNumber);
}
}
ببخشید متنم یکم طولانی شد
امیدوارم متوجه مشکل من شده باشید
ممنون
پاسخ ها