یاد بگیرید که چگونه از عباراتی مانند if، if-else، switch، for و while برای تعریف متغیرها و مشخص کردن عبارات، تصمیم گیری، تکرار روی عبارات و موارد دیگر استفاده کنید.
برنامههای جاوا عبارات را در زمینه گزارهها ارزیابی میکنند، که برای کارهایی مانند اعلان یک متغیر، تصمیمگیری یا تکرار بر روی عبارات استفاده میشوند. می توانیم جملات ساده یا مرکب بنویسیم:
- یک گزاره ساده یک دستورالعمل مستقل برای انجام یک کار است. باید با یک کاراکتر نقطه ویرگول (
;
) خاتمه یابد. - یک گزاره مرکب دنبالهای از جملات ساده و ترکیبی دیگر است که بین نویسههای پرانتز باز و بسته (
{...}
) قرار دارد، که ترکیب را محدود میکند. مرزهای بیانیه عبارات مرکب می توانند خالی باشند، در هر جا که عبارات ساده ظاهر می شوند ظاهر می شوند، و در عوض به عنوان بلوک شناخته می شوند. دستور مرکب با نقطه ویرگول خاتمه نمی یابد.
در این آموزش، نحوه استفاده از دستورات را در برنامههای جاوا خواهید آموخت. میتوانید از عباراتی مانند if
، if-else
، switch
، for
و while استفاده کنید. /code> برای اعلام متغیرها و تعیین عبارات، تصمیم گیری، تکرار (یا حلقه) روی عبارات، شکستن و ادامه تکرار، و موارد دیگر.
آنچه در این آموزش جاوا خواهید آموخت
- نحوه نوشتن اظهارنامه
- نحوه نوشتن عبارات تکلیف
- درباره عبارات تصمیم: if، if-else و switch
- درباره عبارات حلقه: برای، while و do-while
- عبارات شکست در جاوا چیست؟
- عبارات ادامه در جاوا چیست؟
- عبارات خالی در جاوا چیست؟
- نمونه ای از عبارات در برنامه جاوا
نحوه نوشتن عبارات اعلان در جاوا
در مقاله قبلی، من متغیرها را به عنوان راهی برای ذخیره مقادیر در جاوا معرفی کردم. code و توضیح داد که قبل از استفاده از آنها باید آنها را اعلان کنید. از آنجایی که یک اعلان متغیر یک جزیره مستقل از کد است، در واقع یک عبارت است—به طور دقیق، یک گزاره ساده. همه اینها عبارتهای اعلان متغیر هستند:
int age = 25;
float interest_rate;
char[] text = { 'J', 'a', 'v', 'a' };
String name;
یک اعلان متغیر حداقل از یک نام نوع تشکیل شده است، به صورت اختیاری دنباله ای از جفت های کروشه، به دنبال آن یک نام، به صورت اختیاری با دنباله ای از جفت های براکت مربع دنبال می شود و با یک نقطه ویرگول خاتمه می یابد. زمانی که یک متغیر اعلام می شود، ممکن است به صراحت مقداردهی اولیه شود.
نحوه نوشتن دستورات انتساب در جاوا
اکنون گزاره انتساب را در نظر بگیرید که ارتباط نزدیکی با عبارت اعلان متغیر دارد. یک دستور انتساب یک مقدار (احتمالاً ارجاع به یک آرایه یا ارجاع به یک شی) را به یک متغیر اختصاص می دهد. در اینجا چند نمونه آورده شده است:
age = 30;
interest_rate = 4.0F;
age += 10;
text[1] = 'A';
text[2] = 'V';
text[3] = 'A';
name = "John Doe";
دستور انتساب نمونه ای از گزاره بیان است، که عبارتی است که اگر با یک نقطه ویرگول دنبال شود، ممکن است به عنوان یک دستور استفاده شود. عبارات زیر نیز به عنوان عبارات عبارت واجد شرایط هستند:
- پیش افزایش (به عنوان مثال،
++x;
) - پیشافزایش (به عنوان مثال،
--y;
) - پست افزایش (به عنوان مثال،
x++;
) - پست کاهش (به عنوان مثال،
y--;
) - فراخوانی روش (به عنوان مثال،
System.out.println("Hello")؛
) - ایجاد شی (به عنوان مثال،
رشته جدید ("ABC")؛
)
نمونه هایی از اعلان های متغیر و عبارات عبارت
میتوانید از jshell
برای آزمایش اعلانهای متغیر و عبارات عبارت استفاده کنید. در اینجا چند نمونه برای شروع آورده شده است (به «Learn مراجعه کنید جاوا از پایه” برای معرفی jshell
):
jshell> int age = 25
age ==> 25
jshell> float interest_rate
interest_rate ==> 0.0
jshell> char[] text = { 'J', 'a', 'v', 'a' }
text ==> char[4] { 'J', 'a', 'v', 'a' }
jshell> String name
name ==> null
jshell> age = 30
age ==> 30
jshell> interest_rate = 4.0F
interest_rate ==> 4.0
jshell> age += 10
$۷ ==> 40
jshell> text[1] = 'A'
$۸ ==> 'A'
jshell> text[2] = 'V'
$۹ ==> 'V'
jshell> text[3] = 'A'
$۱۰ ==> 'A'
jshell> name = "John Doe"
name ==> "John Doe"
jshell> text
text ==> char[4] { 'J', 'A', 'V', 'A' }
jshell> age++
$۱۳ ==> 40
jshell> age
age ==> 41
توجه داشته باشید که age++
به نظر نمی رسد کاری انجام دهد. در اینجا، می بینید که ۴۰
به متغیر خراش ۱۳$
اختصاص داده شده است. با این حال، عملگر postincrement
پس از برگرداندن مقدار فعلی، افزایش را انجام می دهد. (در واقع، مقدار فعلی را در جایی ذخیره می کند، افزایش را انجام می دهد و سپس مقدار ذخیره شده را برمی گرداند.) وارد کردن age ثابت می کند که age
حاوی ۴۱ است، نتیجه postincrement
.
پوسته جاوا دستورات و ویژگی های مختلفی را برای ساده کردن کار با اسنیپت ها ارائه می دهد. به عنوان مثال، دستور /list
تمام قطعاتی را که در جلسه جاری وارد شده اند نشان می دهد:
jshell> /list
۱ : int age = 25;
۲ : float interest_rate;
۳ : char[] text = { 'J', 'a', 'v', 'a' };
۴ : String name;
۵ : age = 30
۶ : interest_rate = 4.0F
۷ : age += 10
۸ : text[1] = 'A'
۹ : text[2] = 'V'
۱۰ : text[3] = 'A'
۱۱ : name = "John Doe"
۱۲ : text
۱۳ : age++
۱۴ : age
عدد در ستون سمت چپ به طور منحصر به فرد یک قطعه را مشخص می کند. می توانید از این شماره برای اجرای مجدد یک قطعه، فهرست کردن قطعه، رها کردن (حذف) یک قطعه و غیره استفاده کنید:
jshell> /12
text
text ==> char[4] { 'J', 'A', 'V', 'A' }
jshell> /list 13
۱۳ : age++
jshell> /drop 7
| dropped variable $7
jshell> /list
۱ : int age = 25;
۲ : float interest_rate;
۳ : char[] text = { 'J', 'a', 'v', 'a' };
۴ : String name;
۵ : age = 30
۶ : interest_rate = 4.0F
۸ : text[1] = 'A'
۹ : text[2] = 'V'
۱۰ : text[3] = 'A'
۱۱ : name = "John Doe"
۱۲ : text
۱۳ : age++
۱۴ : age
۱۵ : text
در اینجا، /۱۲
را برای اجرای مجدد قطعه شماره ۱۲ وارد کرده ایم که محتوای text
را خروجی می کند. سپس /list 13
را به قطعه شماره ۱۳ لیست وارد کردیم، که سن
را افزایش میدهد. در مرحله بعد، /drop 7
را برای حذف قطعه شماره ۷ وارد کردیم (دیگر از قطعه age += 10
خبری نیست). در نهایت، /list
را وارد کردیم تا همه اسنیپت ها دوباره فهرست شوند. توجه داشته باشید که قطعه شماره ۷ حذف شده است و قطعه شماره ۱۵ به لطف دستور /۱۲
اضافه شده است.
درباره عبارات تصمیم: if, if-else, switch
گزارههای تصمیم به برنامهها اجازه میدهد بین چندین مسیر اجرا انتخاب کنند. به عنوان مثال، اگر فروشنده ای بیش از ۵۰۰ کالا در این ماه بفروشد، به فروشنده جایزه بدهید. همچنین، اگر نمره دانش آموزی در آزمون جبر بیشتر از ۸۵ درصد است، به دانش آموز به خاطر عملکرد خوب تبریک بگویید. در غیر این صورت، به دانش آموز توصیه کنید که برای آزمون بعدی بیشتر مطالعه کند.
جاوا از بیانیههای تصمیم if
، if-else
و switch
به همراه ویژگی تغییر عبارت.
نوشتن عبارات if
ساده ترین دستورات تصمیم جاوا عبارت if
است که یک عبارت بولی را ارزیابی می کند و زمانی که این عبارت به درستی ارزیابی می شود، دستور دیگری را اجرا می کند. دستور if
دارای نحو زیر است:
if (Boolean expression)
statement
دستور if
با کلمه رزرو شده if
شروع میشود و با یک عبارت بولی پرانتز شده ادامه مییابد، که پس از آن عبارت بولی اجرا میشود.
مثال زیر عبارت if
را نشان می دهد. وقتی متغیر age
حاوی مقدار ۵۵ یا بیشتر باشد، if
برای خروجی پیام، System.out.println(...);
را اجرا می کند. :
if (age >= 55)
System.out.println("You are or were eligible for early retirement.");
بسیاری از توسعه دهندگان ترجیح می دهند هر دستور ساده ای را که از دستور if
پیروی می کند در پرانتز بپیچند و به طور موثر آن را به یک دستور ترکیبی معادل تبدیل کنند:
if (age >= 55)
{
System.out.println("You are or were eligible for early retirement.");
}
اگرچه مهاربندها آنچه را که با دستور if
اجرا میشود روشن میکند، من معتقدم که تورفتگی این وضوح را فراهم میکند و مهاربندها غیرضروری هستند.
مثال عبارات if در jshell
بیایید این مثال را با استفاده از jshell
امتحان کنیم. jshell
را مجددا راه اندازی کنید و سپس یک متغیر age
(از نوع int
) معرفی کنید که به ۵۵
مقداردهی اولیه شده است:
jshell> int age = 55
بعد، اولین مثال عبارت if
را وارد کنید (بدون پرانتزهای فرفری اطراف بدنه آن):
jshell> if (age >= 55)
...> System.out.println("You are or were eligible for early retirement.");
You are or were eligible for early retirement.
jshell>
توجه داشته باشید که وقتی یک قطعه چند خطی را وارد می کنید، اعلان jshell>
به اعلان ادامه ...>
تغییر می کند. فشار دادن Enter بعد از آخرین خط قطعه باعث می شود jshell
بلافاصله قطعه را اجرا کند.
/list
را برای فهرست کردن همه قطعهها اجرا کنید. مشاهده کردم که قطعه عبارت if
در جلسه من به ۲
اختصاص داده شده است. اجرای /۲
باعث میشود jshell
فهرست شود و سپس این قطعه اجرا شود و همان پیام خروجی میشود.
اکنون، فرض کنید ۲۵
را به age
اختصاص دهید و سپس /۲
(یا شماره قطعه معادل در جلسه خود) را دوباره اجرا کنید. این بار نباید پیام را در خروجی مشاهده کنید.
نوشتن عبارات if-else
دستور if-else
یک عبارت بولی را ارزیابی می کند و یک دستور را اجرا می کند. عبارت اجرا شده به درست یا نادرست بودن عبارت بستگی دارد. در اینجا نحو دستور if-else
آمده است:
if (Boolean expression)
statement1
else
statement2
دستور if-else
مشابه عبارت if
است، اما شامل کلمه رزرو شده else
است و به دنبال آن دستوری برای اجرا در زمان Boolean وجود دارد. بیان نادرست است
مثال زیر یک عبارت if-else
را نشان می دهد که به فردی که کمتر از ۵۵ سال دارد می گوید چند سال تا بازنشستگی پیش از موعد باقی مانده است:
if (age >= 55)
System.out.println("You are or were eligible for early retirement.");
else
System.out.println("You have " + (55 - age) + " years to go until early retirement.");
عملگر شرطی
عملگر شرطی (?:< /code>) شبیه عبارت
if-else
است. با این حال، این عملگر نمی تواند برای اجرای دستورات جایگزین استفاده شود. در عوض، فقط میتواند یکی از دو مقدار از یک نوع را برگرداند. (عملگر شرطی گاهی اوقات به عنوان عملگر سه تایی نیز شناخته می شود.)
زنجیره کردن عبارات if-else
جاوا به شما امکان میدهد چندین عبارت if-else
را برای موقعیتهایی که باید یکی از چندین دستور را برای اجرا انتخاب کنید، به هم متصل کنید:
if (Boolean expression1)
statement1
else
if (Boolean expression2)
statement2
else
...
else
statementN
زنجیر کردن با اجرای دستور if-else
بعدی هر زمان که عبارت بولی دستور if
فعلی به غلط ارزیابی شود کار می کند. این تظاهرات را در نظر بگیرید:
if (temperature < 0.0)
System.out.println("freezing");
else
if (temperature > 100.0)
System.out.println("boiling");
else
System.out.println("normal");
اولین عبارت if-else
تعیین می کند که آیا مقدار temperature
منفی است یا خیر. اگر چنین است، System.out.println("freezing");
را اجرا می کند. اگر نه، دستور دوم if-else
را اجرا می کند.
دستور دوم if-else
تعیین می کند که آیا مقدار demperature
بیشتر از ۱۰۰ باشد یا خیر. . در غیر این صورت، System.out.println("normal");
را اجرا می کند.
مشکل dangling-else
هنگامی که if
و if-else
با هم استفاده میشوند و کد منبع به درستی تورفتگی ندارد، تعیین اینکه کدام یک از if
مرتبط است دشوار است. با else
. می توانید مشکل را در کد زیر مشاهده کنید:
int x = 0;
int y = 2;
if (x > 0)
if (y > 0)
System.out.println("x > 0 and y > 0");
else
System.out.println("x <= 0");
احتمالاً انتظار دارید که x <= 0
را به عنوان خروجی از این کد ببینید، اما هرگز اتفاق نخواهد افتاد. در عوض، هیچ چیزی خروجی نخواهد داشت. مشکل این است که else
با نزدیکترین if
خود مطابقت دارد، که if (y > ۰)
است. با فرمت مجدد کد، آنچه اتفاق می افتد را واضح تر می کند:
int x = 0;
int y = 2;
if (x > 0)
if (y > 0)
System.out.println("x > 0 and y > 0");
else
System.out.println("x <= 0");
در اینجا، عبارت if-else
از عبارت if (x > ۰)
پیروی می کند. برای مطابقت با هدف مثال قبلی، باید کاراکترهای پرانتزی را در اطراف if (y > ۰)
و عبارت بعدی آن معرفی کنید. اساساً، یک بلوک به دنبال if (x > ۰)
خواهد بود:
int x = 0;
int y = 2;
if (x > 0)
{
if (y > 0)
System.out.println("x > 0 and y > 0");
}
else
System.out.println("x <= 0");
از آنجا که x > ۰
به نادرست ارزیابی می شود، System.out.println("x <= 0");
اجرا می شود. کلمه رزرو شده else
به وضوح با if (x > ۰)
مطابقت دارد.
نوشتن عبارات سوئیچ
هنگامی که شما نیاز به انتخاب بین چندین مسیر اجرا دارید، عبارت switch
جایگزین کارآمدتری برای زنجیرهسازی ارائه میدهد. در اینجا عبارت switch
در محل کار آمده است:
switch (selector expression)
{
case value1: statement1 [break;]
case value2: statement2 [break;]
...
case valueN: statementN [break;]
[default: statement]
}
عبارت switch
با کلمه رزرو شده switch
شروع می شود و با عبارت انتخابگر ادامه می یابد که یکی از موارد بعدی یا حالت پیش فرض را برای اجرا انتخاب می کند. عبارت انتخابگر به یک عدد صحیح، یک کاراکتر یا یک رشته ارزیابی می شود.
ثابت سوئیچ و enum
عبارت انتخابگر همچنین می تواند به یک ثابت enum
ارزیابی شود. درباره استفاده از typesafe enums در برنامه های جاوا بیشتر بیاموزید .
هر مورد یک دستور را برای اجرا مشخص می کند. مورد با کلمه رزرو شده case
و مقداری که مورد را برچسب گذاری می کند شروع می شود. دنبال کردن یک کاراکتر کولون (:
) عبارتی است که باید اجرا شود. دستور میتواند به صورت اختیاری با break;
دنبال شود تا اجرا را به اولین عبارت پس از switch
منتقل کند. اگر هیچ یک از برچسبهای حروف کوچک با مقدار عبارت انتخابگر مطابقت نداشته باشد، حروف پیشفرض اختیاری، که با کلمه رزرو شده default
شروع میشود، اجرا میشود.
در زیر یک عبارت switch
وجود دارد که برای تعیین زوج یا فرد بودن یک مقدار صحیح (با استفاده از عملگر باقی مانده) استفاده می شود. سپس یک پیام مناسب را از طریق موردی که برچسب آن با بقیه مطابقت دارد خروجی میدهد:
int i = 27;
switch (i % 2)
{
case 0: System.out.println("even");
break;
case 1: System.out.println("odd");
}
در این مورد، خروجی فرد
خواهد بود زیرا i % 2
عدد ۱ را به دست میدهد که با برچسب مورد دوم مطابقت دارد. اگر break;
را حذف کنیم، و اگر عدد زوج بود، خروجی زوج
و به دنبال آن فرد
خواهد بود، زیرا اجرا به مورد دوم
فراموش نکنید سوئیچ خود را بشکنید!
فراموش کردن پایان دادن به یک مورد با "break;
" یک خطای رایج هنگام کار با دستورات switch
است. این اشتباه را نکنید
تغییر کیس
گاهی اوقات، مطلوب است که اجرا به مورد بعدی کاهش یابد. به عنوان مثال، فرض کنید میخواهید کد معمولی را در پاسخ به اینکه کاربر یک حرف خط فرمان بزرگ یا کوچک را مشخص میکند، اجرا کنید:
switch (args[i])
{
case "-v":
case "-V": System.out.println("Version 1.0");
break;
// ...
default : System.out.println("unknown option");
}
تصور کنید که یک عبارت for
(که به زودی مورد بحث قرار گرفت) در حال تکرار بر روی هر یک از آرگومان های آرایه آرگومان های خط فرمان است که به روش main()
یک برنامه ارسال می شود. اگر آرگومان -v
(خط تیره و حروف کوچک v) یا -V
(خط تیره و V بزرگ) باشد، شماره نسخه برنامه خروجی خواهد شد. هنگامی که -v
مشخص شده است، لازم است اجرا به حالت زیر کاهش یابد، که در صورت مشخص شدن -V
، شماره نسخه را خروجی می دهد.
حروف پیشفرض زمانی اجرا میشود که رشته ارجاع شده توسط args[i]
با هیچ یک از برچسبهای حروف کوچک مطابقت نداشته باشد. به عبارت دیگر کاربر گزینه ناشناخته ای را مشخص کرده است.
زنجیره شده if-else در مقابل سوئیچ
گاهی اوقات، ممکن است لازم باشد بین یک عبارت زنجیره ای if-else
و یک عبارت معادل switch
یکی را انتخاب کنید. عبارتی که انتخاب میکنید باید بیشترین وضوح را با کمترین لفظ برای کار مورد نظر ارائه دهد.
درباره عبارات حلقه: for، while، و do-while
عبارات حلقه (همچنین به عنوان عبارات تکرار شناخته می شود) به طور مکرر دستورات دیگری را برای تعداد معینی از تکرار (حلقه) اجرا می کنند، یا به طور نامحدود تا زمانی که شرایط پایانی ایجاد شود. برای مثال، همانطور که قبلا ذکر شد، ممکن است بخواهید روی تمام اشیاء String
در آرایه آرگومان های خط فرمان که به متد main()
ارسال شده است، تکرار کنید. جاوا از عبارت های تکرار for
، while
و do-while
پشتیبانی می کند.
نوشتن برای عبارات و برای حلقه ها
دستور for
دستور دیگری را چند بار یا به طور نامحدود اجرا می کند. این اساساً شکل فشرده ای از عبارت while
است (که بعداً مورد بحث قرار خواهد گرفت) و دارای نحو زیر است:
for ([initialize]; [test]; [update])
statement
این مثال نشان میدهد که عبارت for
با کلمه رزرو شده for
شروع میشود و با دنبالهای از سه بخش جدا شده با پرانتز و نیمه ویرگول ادامه مییابد:
- initialize: فهرستی از اعلانها یا تخصیصهای متغیر جدا شده با کاما. این متغیرها که به عنوان متغیرهای تکرار یا متغیرهای حلقه شناخته میشوند، برای فهرستبندی آرایهها، شرکت در محاسبات یا انجام کارهای دیگر استفاده میشوند.
- test: یک عبارت بولی که مدت زمان اجرای حلقه را تعیین می کند. تا زمانی که این عبارت درست باقی بماند، اجرا ادامه دارد.
- به روز رسانی: فهرستی از عبارات جدا شده با کاما که معمولاً متغیرهای حلقه را تغییر می دهند.
به دنبال عبارت for
یک گزاره
برای اجرا مکرر وجود دارد.
هر یک از سه بخش اختیاری است. در نتیجه، for
را می توان به for (; ;)
کوچک کرد. از آنجایی که هیچ شرط توقفی وجود ندارد، حلقه حاصل به عنوان حلقه نامحدود شناخته می شود.
مثال زیر از دستور for
برای تکرار بر روی همه عناصر در آرایه ای به نام args
استفاده می کند و مقدار هر عنصر آرایه را خروجی می دهد:
for (int i = 0; i < args.length; i++)
System.out.println(args[i]);
این مثال به صورت زیر عمل می کند:
- متغیر
i
را اعلام کنید و آن را به۰
مقداردهی اولیه کنید. -
i < args.length
را ارزیابی کنید. اگرi
برابر است باargs.length
، حلقه را خاتمه دهید. - اجرای
System.out.println(args[i]);
. -
i++
را اجرا کنید. - به مرحله ۲ ادامه دهید.
متغیر i
برای بخشهای test
و بهروزرسانی
بیانیه for
و برای بیانیه
با این حال، برای اظهارات بعدی قابل مشاهده نیست. اگر می خواهید عبارات بعدی مقدار نهایی i
را ببینند، i
را قبل از for
به صورت زیر اعلام کنید:
int i;
for (i = 0; i < args.length; i++)
System.out.println(args[i]);
متغیری که حلقه را کنترل میکند میتواند یک نوع اولیه متفاوت باشد، مانند Boolean، کاراکتر یا ممیز شناور با دقت دوگانه. در اینجا سه نمونه آورده شده است:
for (boolean b = false; b != true; b = !b)
System.out.println(b); // This statement executes once.
for (char c = 'A'; c <= 'F'; c++)
System.out.println(c);
for (double d = 0.0; d < 1.0; d += 0.1)
System.out.println(d);
در نهایت، همانطور که قبلا ذکر شد، بخش initialize
می تواند چندین متغیر را اعلام کند. مثال زیر دو متغیر را اعلام می کند، یک متغیر را افزایش می دهد و متغیر دیگر را در طول حلقه کاهش می دهد:
for (int i = 0, j = 5; i <= 5; i++, j--)
System.out.println(i + j);
خروجی از شش خط ۵
تشکیل شده است.
نوشتن عبارات while
دستور while
به طور مکرر دستور دیگری را اجرا می کند در حالی که عبارت بولی کنترل کننده آن همچنان به درستی ارزیابی می شود. این عبارت دارای نحو زیر است:
while (Boolean expression)
statement
این نحو نشان می دهد که عبارت while
با کلمه رزرو شده while
شروع می شود و با عبارت بولی پرانتز شده ادامه می یابد. این عبارت با دستور دیگری همراه است که به طور مکرر اجرا می شود.
در اینجا نمونه ای از عبارت while
آمده است:
int i = 0;
while (i < args.length)
{
System.out.println(args[i]);
i++;
}
این مثال به صورت زیر عمل می کند:
- متغیر
i
را اعلام کنید و آن را به۰
مقداردهی اولیه کنید. -
i < args.length
را ارزیابی کنید. اگرi
برابر است باargs.length
، حلقه را خاتمه دهید. - اجرای
System.out.println(args[i]);
. -
i++
را اجرا کنید. - به مرحله ۲ ادامه دهید.
این مثال معادل while
مثال قبلی for
است. شما می توانید مثال را فشرده کنید تا به طور مکرر یک دستور ساده به جای یک دستور مرکب اجرا شود، به صورت زیر:
int i = 0;
while (i < args.length)
System.out.println(args[i++]);
در این مثال فشرده، عبارت postincrement را به عبارتی تغییر می دهیم که به عملگر فهرست آرایه ارسال می شود. اگرچه کد فشرده تر است، برخی ممکن است مثال قبلی را برای وضوح ترجیح دهند.
نوشتن عبارات do-while
دستور do-while
به طور مکرر یک دستور را اجرا می کند در حالی که عبارت بولی کنترل کننده آن، که پس از اجرای دستور ارزیابی می شود، به درستی ارزیابی می شود. این عبارت دارای نحو زیر است:
do
statement
while (Boolean expression); // The semicolon terminator is mandatory.
این نحو نشان میدهد که دستور do-while
با کلمه رزرو شده do
شروع میشود، با یک دستور برای اجرا مکرر ادامه مییابد و با کلمه رزرو شده while
، به دنبال آن یک عبارت بولی پرانتز شده است.
مثال زیر عبارت do-while
را نشان می دهد:
int ch;
do
{
System.out.println("Press x to continue.");
ch = System.in.read();
}
while (ch != 'x');
این مثال به صورت زیر عمل می کند:
- برای ذخیره کد عددی یک کاراکتر، متغیر
int
ch
را اعلام کنید. - از کاربر بخواهید برای ادامه، کلید x را فشار دهد.
- خواندن یک کد کلید از صفحه کلید از طریق
System.in.read()
، که همراهSystem.out.println()
است. از آنجایی که این روش کد کلید را به صورتint
برمیگرداند، این مقدار را بهch
اختصاص دهید. - مقدار
ch
را با'x'
مقایسه کنید. توجه داشته باشید که قبل از مقایسه،'x'
ازchar
بهint
بزرگ شده است. هنگامی که این عبارت به اشتباه ارزیابی شد، حلقه را خاتمه دهید (ch
برابر است با'x'
). در غیر این صورت، به مرحله ۲ ادامه دهید.
تفاوت بین while
و do-while
در این است که while
دستور خود را صفر یا چند بار اجرا می کند، در حالی که do-while
عبارت خود را یک یا چند بار اجرا می کند. شما بر اساس این ویژگی یکی از دستورات را انتخاب خواهید کرد. به عنوان مثال، استفاده از while
برای تکرار روی آرایه args
مناسب است زیرا ممکن است طول این آرایه صفر باشد و شما نمی خواهید به آرایه دسترسی داشته باشید و یک خارج از محدوده استثنا. در مقابل، حداقل یک بار با do-while
به آرایه دسترسی خواهید داشت. مناسب است که از do-while
برای ترغیب کاربر برای وارد کردن کلید و خواندن پاسخ استفاده کنید زیرا این کارها باید حداقل یک بار انجام شوند.
گزاره های شکست
عبارت break
را مشاهده کردهاید که برای خارج شدن از دستور switch
پس از اجرای یک مورد استفاده میشود. همچنین میتوانیم از دستورات break
به عنوان بخشی از یک عبارت تکرار، همراه با عبارت continue
استفاده کنیم. ما هر دوی این گزینه ها را بررسی خواهیم کرد.
عبارات شکست بدون برچسب و برچسب
عبارت break
بدون برچسب، یک سوئیچ
، برای
، while
یا do-while
عبارت با انتقال اجرا به اولین دستور بعد از این دستور. اینجا خودش هست:
break;
در اینجا یک عبارت break
بدون برچسب در زمینه عبارت تکرار وجود دارد:
for (; ;)
{
System.out.println("Press x to continue.");
int ch = System.in.read();
if (ch == 'x')
break;
}
در اینجا ما یک حلقه بی نهایت مبتنی بر for
را معرفی کردهایم که به طور مکرر از کاربر میخواهد کلید x را فشار دهد و این کلید را میخواند تا به 'x'
برسد. یک عبارت if
مقایسه را انجام می دهد و break;
را برای پایان دادن به حلقه با فشار دادن کلید x اجرا می کند.
از حلقه های بی نهایت با while و do-while
اجتناب کنید
میتوانید حلقههای بینهایت معادل را بر اساس عبارات while
یا do-while
با تعیین true
بهعنوان عبارت بولی (مثلاً while) ایجاد کنید. (true) ...
و do ... while (true);
). به طور کلی، شما میخواهید از حلقههای بینهایت که اغلب از کدهای باگ ناشی میشوند اجتناب کنید - به عنوان مثال، ایجاد عبارت بولی یک حلقه بر اساس ==
یا !=
در مقایسه یک ممیز شناور مقدار متغیر به یک مقدار ممیز شناور که نمی تواند دقیقاً در حافظه نمایش داده شود (مانند ۰.۱). با این حال، مثال بالا استفاده از آنها را به شما نشان می دهد.
عبارت شکست برچسب دار
این عبارت یک عبارت حاوی و دارای برچسب سوئیچ
، برای
، while
، یا do-while
را خاتمه می دهد. انتقال اجرا به اولین دستور بعد از دستور حاوی. دارای نحو زیر است:
break label;
این نحو شامل کلمه رزرو شده break
است که به دنبال آن یک شناسه کلمه غیر رزرو شده به عنوان یک برچسب و به دنبال آن یک نقطه ویرگول قرار می گیرد. برچسب باید پیشوند یک switch
یا عبارت تکرار قبلی باشد و باید با یک دونقطه دنبال شود.
مثال زیر عبارت برچسب دار break
را در یک متن عبارت تکرار نشان می دهد:
outer:
while (true)
{
System.out.println("Guess number between 0 and 9.");
while (true)
{
System.out.println("Press n for new game or q to quit.");
int ch = System.in.read();
if (ch == 'n')
break;
if (ch == 'q')
break outer;
}
}
این مثال یک جفت حلقه های در حالی که
بی نهایت تودرتو را نشان می دهد که بخشی از یک بازی حدس اعداد را توصیف می کند. حلقه بیرونی یک خرد برای انجام بازی است، در حالی که حلقه داخلی کاربر را به انجام یک بازی جدید یا ترک بازی ترغیب می کند.
اگر کاربر کلید n را فشار دهد، دستور break
بدون برچسب اجرا میشود تا حلقه داخلی را خاتمه دهد تا یک بازی جدید انجام شود. اگر q فشار داده شود، break outer;
برای خروج از حلقه بیرونی اجرا میشود که به آن برچسب outer:
اختصاص داده میشود.
ادامه بیانیه ها
عبارات continue
را میتوان برچسبگذاری کرد یا بدون برچسب. عبارت continue
بدون برچسب، باقیمانده تکرار فعلی را رد می کند و به عبارت تکرار می گوید که به تکرار بعدی بروید. دارای نحو زیر است:
continue;
در اینجا مثالی از استفاده از عبارت continue
بدون برچسب آمده است:
for (int i = -2; i <= 2; i++)
if (i == 0)
continue;
else
System.out.println(10 / i);
عبارت for
این مثال از -۲
به ۲
تکرار میشود، به طور مکرر دستور if-else
را اجرا میکند و سپس < را افزایش میدهد. code>i توسط ۱ بعد از هر تکرار.
برای جلوگیری از تقسیم بر صفر استثنا وقتی که i
حاوی ۰ باشد، if
i
را برای ۰ آزمایش می کند. اگر اینطور باشد، i
را اجرا می کند. code>continue;، که باعث میشود for
i
را افزایش دهد و سپس i <= 2
را ارزیابی کند. در غیر این صورت، ۱۰ / i
ارزیابی می شود و نتیجه خروجی می شود.
عبارت continue
برچسبگذاری شده از تکرارهای باقیمانده یک یا چند عبارت تکرار تودرتو میگذرد و اجرا را به عبارت تکرار برچسبگذاری شده منتقل میکند. دارای نحو زیر است:
continue label;
این نحو شامل کلمه رزرو شده continue
و به دنبال آن یک شناسه کلمه غیر رزرو شده به عنوان یک برچسب و به دنبال آن یک نقطه ویرگول است. برچسب باید پیشوند یک عبارت تکرار قبلی باشد و باید با یک دونقطه دنبال شود.
در اینجا یک مثال با استفاده از عبارت continue
نشان داده شده است:
outer:
for (int i = -2; i <= 2; i++)
for (int j = -2; j <= 2; j++)
if (i == 0)
continue outer;
else
if (j == 0)
continue;
else
System.out.println(10 / i * j);
این مثال یک جفت حلقه تودرتو for
را ارائه میکند که هر متغیر حلقه از -۲ تا ۲ متغیر است. ایده این است که ۱۰ را بر حاصل ضرب مقادیر متغیر حلقه تقسیم کنیم. با این حال، تقسیم بر صفر زمانی اتفاق می افتد که هر یک از متغیرها دارای ۰ باشد.
برای جلوگیری از تقسیم بر صفر، از عبارت زنجیرهای if-else
برای آزمایش مقادیر i
و j
برای ۰ استفاده میشود. مقدار code>i ۰ است، continue outer؛
برای پایان دادن به حلقه داخلی و پیشبرد حلقه بیرونی (با برچسب outer:
) از ۰ استفاده می شود. اگر مقدار j
۰ باشد، continue;
برای خروج از تکرار حلقه داخلی فعلی و پیشبرد حلقه داخلی از ۰ استفاده میشود. انجام شده و نتیجه آن خروجی است.
عبارات خالی
یک جمله نهایی برای در نظر گرفتن وجود دارد، که عبارت تخلیه است، عبارتی که صرفاً از کاراکتر نقطه ویرگول تشکیل شده است. این بیانیه هیچ کاری را انجام نمی دهد، و در عین حال مفید است. به مثال زیر توجه کنید:
for (int ch; (ch = System.in.read()) != -1; System.out.print((char) ch));
این مثال محتوای جریان ورودی استاندارد را کپی می کند و از طریق تماس خوانده می شود. به System.in.read()
، به جریان خروجی استاندارد، نوشته شده از طریق تماس با System.out.print()
، یک همراه System.out.println()
که خروجی ندارد یک جداکننده خط. زمانی که جریان ورودی استاندارد به صفحه کلید به یک فایل متنی هدایت شود بهترین عملکرد را دارد. .
هنگامی که به یک فایل هدایت می شود، System.in.read()
-۱ را هنگامی که ورودی دیگری وجود ندارد برمی گرداند. وقتی تغییر مسیر داده نشود، System.in.read()
ورودی خود را از صفحه کلید دریافت می کند و هرگز -۱ را بر نمی گرداند. درعوض، زمانی که دیگر کدهای کلیدی برای بازگشت وجود ندارد، System.in.read()
یک کاراکتر جداکننده خط برمی گرداند - برای بازگرداندن کاراکترهای rn
در ویندوز به دو فراخوانی نیاز است. یک تماس در UnixLinux برای بازگرداندن کاراکتر n
آن و یک تماس در نسخههای قدیمیتر سیستمعامل مک برای بازگرداندن کاراکتر r
آن لازم است. برای اطلاعات بیشتر، Newline را بررسی کنید.
همانطور که می بینید، تمام کارها در بخش های initialize
و test
عبارت for
انجام می شود. نقطه ویرگول آخر به عبارت خالی اشاره دارد که به طور مکرر اجرا می شود.
فشرده کردن یا فشرده نشدن؟
برخی از توسعه دهندگان فکر می کنند که مثال قبلی به دلیل فشرده بودن آن زیبا است، در حالی که برخی دیگر فشرده بودن کد را خواندن و درک نمی کنند. کدام سبک را ترجیح می دهید؟
مواظب عبارت خالی باشید زیرا می تواند منشا باگ هایی باشد که به سختی پیدا می شوند. برای مثال، ممکن است انتظار داشته باشید که عبارت for
زیر ۱۰ نمونه از کلمه Hello
را تولید کند:
for (int i = 0; i < 10; i++);
System.out.println("Hello");
در عوض، شما فقط یک نمونه از این کلمه را مشاهده خواهید کرد، زیرا عبارت خالی بعد از پرانتز بسته شدن عبارت for
است. for
دستور خالی را ۱۰ بار اجرا می کند و پس از آن فراخوانی متد یک بار اجرا می شود.
نمونه برنامه با دستورات جاوا
اکنون که با دستورات جاوا آشنا شدید، می توانید از آنها برای نوشتن برنامه های جاوا جالب استفاده کنید. به عنوان مثال، من یک بازی نوشته ام که به طور تصادفی یک عدد صحیح از ۰ تا ۹ را انتخاب می کند و از شما می خواهد که عدد را حدس بزنید. اگر خیلی زیاد یا خیلی پایین حدس بزنید، بازی به شما خواهد گفت. همچنین به شما می گوید که چه زمانی درست حدس می زنید، و از شما می پرسد که آیا می خواهید دوباره بازی کنید.
چندین کلاس و متد را در کد خواهید دید:
- من از
System.in.read()
برای برگرداندن کد یک کلید فشار داده شده (زمانی که ورودی استاندارد تغییر مسیر داده نمی شود) یا یک مقدار ۸ بیتی از یک فایل (زمانی که ورودی استاندارد است) استفاده می کنم. تغییر مسیر داده شد).System.in.read()
قادر به ایجاد یک استثنا است، بنابراین من مجبور شدم "throws Exception
" را به روشmain()
اضافه کنم. هدر، همانطور که درpublic static void main(String[] args) Exception
را پرتاب می کند. این از کامپایلر از گزارش خطا جلوگیری می کند. - برای بدست آوردن یک عدد صحیح تصادفی، باید عضو متد
random()
از کلاسMath
کتابخانه کلاس استاندارد را فراخوانی کنم.random()
یک مقدار ممیز شناور از ۰.۰ تا تقریبا ۱.۰ را برمی گرداند. یک عبارت این عدد را به یک عدد صحیح مفیدتر تبدیل می کند.
فهرست ۱ کد منبع برنامه Guess
را ارائه می دهد.
class Guess
{
public static void main(String[] args) throws Exception
{
outer:
while (true)
{
System.out.println("I'm thinking of a number between 0 and 9.");
int number = (int) (Math.random() * 10);
while (true)
{
int guessNumber;
while (true)
{
System.out.println("Enter your guess number between 0 and 9.");
guessNumber = System.in.read();
while (System.in.read() != 'n');
if (guessNumber >= '0' && guessNumber <= '9')
{
guessNumber -= '0';
break;
}
}
if (guessNumber < number)
System.out.println("Your guess is too low.");
else
if (guessNumber > number)
System.out.println("Your guess is too high.");
else
{
System.out.println("Congratulations! You guessed correctly.");
while (true)
{
System.out.println("Press n for new game or q to quit.");
int ch = System.in.read();
while (System.in.read() != 'n');
if (ch == 'n')
continue outer;
if (ch == 'q')
break outer;
}
}
}
}
}
}
Guess
بسیاری از ویژگیهای اساسی زبان جاوا، از جمله عبارات را نشان میدهد. متد main()
یک عبارت while
را ارائه میکند که یک عدد جدید تولید میکند و به شما فرصتی میدهد تا آن را حدس بزنید. عبارت (int) (Math.random() * 10)
مقدار بازگشتی random()
را در ۱۰ ضرب می کند تا محدوده را به ۰.۰ به تقریباً ۱۰.۰ تغییر دهد و تبدیل می کند. نتیجه به یک عدد صحیح از ۰ تا ۹ می رسد.
آیا به پرانتز نیاز داریم؟
پرانتزهای اطراف Math.random() * 10
ضروری هستند زیرا عملگر cast [(int)
] اولویت بیشتری نسبت به ضرب دارد (*
). در غیاب پرانتز، مقدار برگشتی random()
به یک عدد صحیح تبدیل می شود که همیشه ۰ خواهد بود. ضرب ۰ در ۱۰ به ۰ منجر می شود که همیشه به اختصاص داده می شود. شماره
. نتیجه بازی بسیار خسته کننده خواهد بود.
پس از تولید عدد، main()
یک عبارت درونی while
را برای مدیریت حدس و گمان اجرا می کند. مکرراً یک حدس میخواهد، مقدار کاراکتر یونیکد کلید فشرده شده را از ۰ تا ۹ به یک عدد صحیح باینری تبدیل میکند و تعیین میکند که آیا کاربر درست حدس زده است یا خیر. یک پیام مناسب خروجی است. به کاربرانی که به درستی حدس می زنند این فرصت داده می شود که با فشار دادن n
یک بازی جدید انجام دهند یا با فشار دادن q
از برنامه خارج شوند.
بخش جالب کد منبع while (System.in.read() != 'n');
است. من از این عبارت برای پاک کردن نویسه(های) جداکننده خط (به عنوان مثال rn
در ویندوز) از بافر صفحه کلید سیستم عامل استفاده می کنم. بدون این، چندین اعلان می بینید زیرا هر کاراکتر جداکننده به عنوان تلاشی برای وارد کردن مقداری از ۰ تا ۹ (یا n یا q) تفسیر می شود. اگر جاوا را روی نسخه قدیمی سیستم عامل Mac اجرا می کنید، احتمالاً باید n
را با r
جایگزین کنید، که جداکننده خطوط مک است. هنگام اجرا بر روی لینوکس یا یونیکس، که جداکننده خطوط آنها n
است، هیچ تغییری لازم نیست.
فهرست ۱ را به صورت زیر کامپایل کنید:
javac Guess.java
سپس برنامه را اجرا کنید:
java Guess
در زیر خروجی یک نمونه اجرا آمده است:
I'm thinking of a number between 0 and 9.
Enter your guess number between 0 and 9.
۵
Your guess is too high.
Enter your guess number between 0 and 9.
۲
Your guess is too low.
Enter your guess number between 0 and 9.
۳
Your guess is too low.
Enter your guess number between 0 and 9.
۴
Congratulations! You guessed correctly.
Press n for new game or q to quit.
q
توجه داشته باشید که می توانید این کد را با کار کردن با کلاس System
کتابخانه کلاس استاندارد، که دسترسی به ویژگی line.separator
را ارائه می دهد، قابل حمل کنید. این کار می تواند تمرین خوبی برای توسعه دهندگانی باشد که با جاوا راحت هستند. کلاس ها و روش ها.
استفاده از ویرایشگر Java Shell
ممکن است بخواهید این برنامه را با استفاده از ابزار jshell
ایجاد یا ویرایش کنید. دستور /edit
را برای این منظور مفید خواهید یافت. وقتی /edit را وارد میکنید، jshell
یک پنجره ویرایش با لغو، پذیرش و ویرایش< نمایش میدهد. دکمه های /em>:
- لغو: ویرایشگر را بدون ذخیره تغییرات لغو کنید.
- پذیرفتن: تغییرات را بدون خروج از ویرایشگر ذخیره کنید. پوسته جاوا یک پیام اصلاح را در هنگام ذخیره تغییرات نمایش می دهد.
- خروج: تغییرات را ذخیره کرده و ویرایشگر را ترک کنید. پوسته جاوا یک پیام اصلاح را در هنگام ذخیره تغییرات نمایش می دهد.
فهرست ۱ را در ویرایشگر کپی کرده و از آن خارج شوید. سپس Guess.main(null) را در اعلان jshell>
وارد کنید تا برنامه اجرا شود. پس از پایان کار با برنامه، q را وارد کنید و به اعلان jshell>
بازگردانده می شوید.
نتیجه گیری
به همراه عبارات و عملگرهای جاوا، دستورات ابزار کار یک برنامه جاوا هستند. تسلط بر این سه ویژگی اصلی زبان به شما یک پایه محکم برای کاوش در جنبه های پیشرفته تر برنامه نویسی با جاوا می دهد. در این مقاله، با عبارات جاوا و نحوه استفاده از آنها در برنامه های جاوا آشنا شده اید.
پرش به: کلاس ها و اشیاء در جاوا .
پست های مرتبط
تصمیم گیری و تکرار با دستورات جاوا
تصمیم گیری و تکرار با دستورات جاوا
تصمیم گیری و تکرار با دستورات جاوا