ورود

View Full Version : مقدار دهی اولیه به متغیر



hamid_c
یک شنبه 09 فروردین 1394, 20:12 عصر
سلام
اول عذر خواهی میکنم اگه جای اشتباهی سوالمو پرسیدم، چون جایی تو تاپیک جاوا برای مبتدی ها پیدا نکردم
من تازه چند روزی هست که شروع کردم به یادگیری جاوا، منبعی هم که میخونم کتاب دایتل هست
تو یکی از مثال هاش یه مشکلی داشتم و متوجه نمیشم چی شده
برنامه هم در مورد یه بازی پرتاب تاس هست
به این صورت که دو تا تاس پرتاب میشه
تو پرتاب اول اگه مجموع تاس ها شد 7 یا 11 برنده میشید، اما اگه مجموع تاس ها شد 2 یا 3 یا 12 شما بازنده هستین
در غیر این صورت مجموع تاس ها میشه پوینت شما، که تو پرتاب های بعدی باید دوباره مجموع تاس هاتون برابر با پوینت بشه
بازی اینقد ادامه پیدا میکنه تا اینکه مجموع تاس هاش شما برابر با پوینت بشه ( که در این صورت برنده میشید ) یا مجموع تاس ها 7 میشه ( که در این صورت بازنده هستید )

حالا مشکل من این قسمت هست که متوجه نمیشم

تو خط 26 میاد یه متغیر (myPoint) تعریف میکنه و مقدار اولیه بهش میده
کار این متغیر هم اینه که اگه نتیجه ی بازی در پرتاب اول مشخص نشد میاد مجموع تاس ها رو ذخیره میکنه که جلوتر با مقدار مجموع تاس های بعدی مقایسه کنه و .........
مشکلم اینه که چرا حتما باید مقدار اولیه داده بشه به این متغیر؟؟؟ و اگه مقدار دهی نشه موقع کامپایل ارور میده؟؟؟
مگه اینطور نیست که زمانی این متغیر مورد استفاده قرار میگیره که نتیجه بازی تو پرتاب اول مشخص نشه ( که در این صورت تو قسمت switch موردی که انتخاب میشه default هست و اونجا متغیر myPoint مقدار دهی میشه )
اگر هم تو پرتاب اول نتیجه مشخص شه که دیگه وارد حلقه (خط 54-65) نمیشه و اصن دیگه نیازی به بررسی myPoint نیست که بخواد مقدار داشته باشه یا نه

چرا باید این متغیر مقدار اولیه بگیره؟؟؟

ممنون







// Craps class simulates the dice game craps.
import java.util.Random;


public class Craps
{
// create random number generator for use in method rollDice
private static final Random randomNumbers = new Random();


// enumeration with constants that represent the game status
private enum Status { CONTINUE, WON, LOST };


// constants that represent common rolls of the dice
private static final int SNAKE_EYES = 2;
private static final int TREY = 3;
private static final int SEVEN = 7;
private static final int YO_LEVEN = 11;
private static final int BOX_CARS = 12;


// plays one game of craps
public static void main( String[] args )
{
int myPoint = 0; // point if no win or loss on first roll
Status gameStatus; // can contain CONTINUE, WON or LOST


int sumOfDice = rollDice(); // first roll of the dice


// determine game status and point based on first roll
switch ( sumOfDice )
{
case SEVEN: // win with 7 on first roll
case YO_LEVEN: // win with 11 on first roll
gameStatus = Status.WON;
break;
case SNAKE_EYES: // lose with 2 on first roll
case TREY: // lose with 3 on first roll
case BOX_CARS: // lose with 12 on first roll
gameStatus = Status.LOST;
break;
default: // did not win or lose, so remember point
gameStatus = Status.CONTINUE; // game is not over
myPoint = sumOfDice; // remember the point
System.out.printf( "Point is %d\n", myPoint );
break; // optional at end of switch
} // end switch


// while game is not complete
while ( gameStatus == Status.CONTINUE ) // not WON or LOST
{
sumOfDice = rollDice(); // roll dice again


// determine game status
if ( sumOfDice == myPoint ) // win by making point
gameStatus = Status.WON;
else
if ( sumOfDice == SEVEN ) // lose by rolling 7 before point
gameStatus = Status.LOST;
} // end while


// display won or lost message
if ( gameStatus == Status.WON )
System.out.println( "Player wins" );
else
System.out.println( "Player loses" );
} // end main


// roll dice, calculate sum and display results
public static int rollDice()
{
// pick random die values
int die1 = 1 + randomNumbers.nextInt( 6 ); // first die roll
int die2 = 1 + randomNumbers.nextInt( 6 ); // second die roll


int sum = die1 + die2; // sum of die values


// display results of this roll
System.out.printf( "Player rolled %d + %d = %d\n",
die1, die2, sum );


return sum; // return sum of dice
} // end method rollDice
} // end class Craps

MohammadReza1994
یک شنبه 09 فروردین 1394, 21:54 عصر
اگه مقدار اولیه نگیره شاید default توی سوییچ اجرا نشه در این صورت توی خط 60 شرط بلاتکلیف میمونه با یه متغیر بی مقدار

hamid_c
یک شنبه 09 فروردین 1394, 22:02 عصر
اگه مقدار اولیه نگیره شاید default توی سوییچ اجرا نشه در این صورت توی خط 60 شرط بلاتکلیف میمونه با یه متغیر بی مقدار

آخه اجرا شدن default در switch که ربطی به داشتن یا نداشتن مقدار اولیه این متغیر نداره
اجرا شدن default شرطش چیز دیگه هست که اگه اجرا شه اونوقت myPoint هم مقدار میگیره
اگه هم وارد default نشه و myPoint مقدار نگیره دیگه اصن کار برنامه تو همون پرتاب اول تاس تموم میشه و وارد حلقه نمیشه و کاری به همون خط 60 که میفرمایید نداره ( و کلا دیگه کاری با myPoint نداره برنامه )
خط 60 فقط در صورتی اجرا میشه که حتما default انتخاب شه

MohammadReza1994
یک شنبه 09 فروردین 1394, 22:08 عصر
شما اینو میدونید ولی کامپایلر اینو که نمیدونه! کامپایلر هوشمنده ولی درک و فهمی از کد نداره. کامپایلر فقط یه شرط بلاتکلیف میببینه.

hamid_c
یک شنبه 09 فروردین 1394, 22:11 عصر
شما اینو میدونید ولی کامپایلر اینو که نمیدونه! کامپایلر هوشمنده ولی درک و فهمی از کد نداره. کامپایلر فقط یه شرط بلاتکلیف میببینه.

آها، یعنی حتی اگه یه خطی که اجرا ممکنه نشه ( مثل همین مورد )، اما کامپایلر اونو کامپایل و در نظر میگیره حتی اگه تو روند اجرای برنامه لزومی نداشته باشه؟؟؟

MohammadReza1994
یک شنبه 09 فروردین 1394, 22:11 عصر
در ضمن برای این بازی که شما شرح دادید این کد واقعا پیچیدس. اگه خودت فکر کنی و یه الگوریتم طراحی کنی میتونی کد ساده تری بنویسی. اون کتابو برنامه نویس حرفه ای نوشته و درکش از جاوا با شما که تازه واردی فرق داره.

MohammadReza1994
یک شنبه 09 فروردین 1394, 22:13 عصر
آها، یعنی حتی اگه یه خطی که اجرا ممکنه نشه ( مثل همین مورد )، اما کامپایلر اونو کامپایل و در نظر میگیره حتی اگه تو روند اجرای برنامه لزومی نداشته باشه؟؟؟
بله حتی این مورد توی زبان ها دیگه هم هست. شما اگه ویژوال سی پلاس پلاس کد بزنی اونموقع میگی صد رحمت به کامپایلر جاوا. یه برنامه نویس خوب به تمام متغیراش مقدار اولیه میده.

hamid_c
یک شنبه 09 فروردین 1394, 22:14 عصر
در ضمن برای این بازی که شما شرح دادید این کد واقعا پیچیدس. اگه خودت فکر کنی و یه الگوریتم طراحی کنی میتونی کد ساده تری بنویسی. اون کتابو برنامه نویس حرفه ای نوشته و درکش از جاوا با شما که تازه واردی فرق داره.

نه دوست عزیز، تو جاوا تازه کار هستم، اما سی و سی پلاس پلاس کار کرم قبلا هم و تجربه برنامه نویسی دارم، خیلی دیگه تازه کار نیستم:لبخند::قهقهه:

hamid_c
یک شنبه 09 فروردین 1394, 22:16 عصر
بله حتی این مورد توی زبان ها دیگه هم هست. شما اگه ویژوال سی پلاس پلاس کد بزنی اونموقع میگی صد رحمت به کامپایلر جاوا. یه برنامه نویس خوب به تمام متغیراش مقدار اولیه میده.

ممنون از کمکت:چشمک: