۲۹ شهریور ۱۴۰۳

Techboy

اخبار و اطلاعات روز تکنولوژی

تصمیم گیری و تکرار با دستورات جاوا

یاد بگیرید که چگونه از عباراتی مانند if، if-else، switch، for و while برای تعریف متغیرها و مشخص کردن عبارات، تصمیم گیری، تکرار روی عبارات و موارد دیگر استفاده کنید.

یاد بگیرید که چگونه از عباراتی مانند 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]);

این مثال به صورت زیر عمل می کند:

  1. متغیر i را اعلام کنید و آن را به ۰ مقداردهی اولیه کنید.
  2. i < args.length را ارزیابی کنید. اگر i برابر است با args.length، حلقه را خاتمه دهید.
  3. اجرای System.out.println(args[i]);.
  4. i++ را اجرا کنید.
  5. به مرحله ۲ ادامه دهید.

متغیر 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++;
}

این مثال به صورت زیر عمل می کند:

  1. متغیر i را اعلام کنید و آن را به ۰ مقداردهی اولیه کنید.
  2. i < args.length را ارزیابی کنید. اگر i برابر است با args.length، حلقه را خاتمه دهید.
  3. اجرای System.out.println(args[i]);.
  4. i++ را اجرا کنید.
  5. به مرحله ۲ ادامه دهید.

این مثال معادل 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');

این مثال به صورت زیر عمل می کند:

  1. برای ذخیره کد عددی یک کاراکتر، متغیر int ch را اعلام کنید.
  2. از کاربر بخواهید برای ادامه، کلید x را فشار دهد.
  3. خواندن یک کد کلید از صفحه کلید از طریق System.in.read()، که همراه System.out.println() است. از آنجایی که این روش کد کلید را به صورت int برمی‌گرداند، این مقدار را به ch اختصاص دهید.
  4. مقدار 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> بازگردانده می شوید.

نتیجه گیری

به همراه عبارات و عملگرهای جاوا، دستورات ابزار کار یک برنامه جاوا هستند. تسلط بر این سه ویژگی اصلی زبان به شما یک پایه محکم برای کاوش در جنبه های پیشرفته تر برنامه نویسی با جاوا می دهد. در این مقاله، با عبارات جاوا و نحوه استفاده از آنها در برنامه های جاوا آشنا شده اید.

پرش به: کلاس ها و اشیاء در جاوا .