• شکستن حلقه جاوا. حلقه ها در جاوا مثال ها و توضیحات: برای - حلقه جاوا

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

    که در زبان جاواراه های مختلفی برای ایجاد چرخه وجود دارد. همانطور که ممکن است حدس بزنید، ما همه آنها را در نظر خواهیم گرفت.

    اولین راه برای اعلام یک حلقه استفاده از ساختار زیر است: for (شرط شروع حلقه، شرط پایان، مرحله ای که حلقه با آن حرکت می کند) (بدنه حلقه)

    بیایید مستقیماً به سراغ مثال ها برویم. فرض کنید وظیفه داریم 10 بار عبارت سلام دنیا را نمایش دهیم. اگر از حلقه ها استفاده نمی کنید، فقط می توانید System.out.println ("Hello world") را بنویسید. ده بار و مشکل را حل کنید. بیایید از حلقه ها برای این منظور استفاده کنیم. یک کلاس جدید ایجاد کنید و نام آن را برای مثال CuclesInJava بگذارید. حالا یک شرط حلقه (بگذارید 0 باشد)، یک شرط پایانی 10 و یک مرحله را اعلام کنید. قدم به قدم پیش خواهیم رفت. در بدنه حلقه، خط System.out.println ("Hello world");

    در اینجا یک کد نمونه است:

    حاصل این کد 10 سطر متوالی عبارت «سلام دنیا!» خواهد بود.

    چه برسد به نوشتن چیز پیچیده تر. ما قبلاً موارد اساسی را یاد گرفته ایم. از آنها استفاده کنیم.

    بیایید یک برنامه ساده بنویسیم که هر بار که مرحله + مقداری متغیر برابر با 5 می شود یک خط با یک هشدار نمایش می دهد. تصورم خیلی بد است))

    ابتدا بیایید کدی بنویسیم که متغیری را که از کنسول وارد شده است به عنوان ورودی بپذیرد. در مقاله قبلی مثالی از این کد زدم و قرار گذاشتیم که بعداً نحوه کارکرد و از کجا آمده است. در حال حاضر، ما فقط از آن استفاده می کنیم:

    در مرحله بعد، باید یک حلقه بنویسید که از صفر شروع شود و تا ده شمارش کند (مانند مثال قبلی). در بدنه حلقه، یک دستور شرطی می نویسیم که بررسی می کند که آیا این متغیر برابر با 5 است یا خیر، و اگر چنین است، رشته "OK" را نمایش می دهیم. این چیزی است که من دریافت کردم:

      وارد کردن java.util.Scanner;

      کلاس عمومی CuclesInJava(

      متغیر int = scanner.nextInt(); //به تدریج به این موضوع می رسیم و بعد معلوم می شود که چگونه کار می کند

      برای (int i = 1 ; i< 10 ; i++ ) {

      int newVariable = i + متغیر;

      if (newVariable== 5) (

    خیلی خوب نشد با این مثال، من می‌خواستم نشان دهم که چگونه می‌توان از حلقه‌ها با شاخه‌ها در ارتباط استفاده کرد.

    راه بعدی برای اعلام حلقه ها با while(condition is true) (بلوک کدی که باید اجرا شود) است. این طرح شکل دیگری دارد:

    do (بلوکی از کد برای اجرا) while (شرط درست است). تفاوت بین اول و دوم این است که دومی بدون در نظر گرفتن اینکه شرط درست است یا نه، یک چرخه را اجرا می کند. می توانید خودتان فکر کنید: ابتدا کد را اجرا می کنیم و سپس شرایط را بررسی می کنیم. و حتی اگر شرط درست نباشد، باز هم کد یک بار اجرا می شود، در زمانی که شرط برای اولین بار در فرم اول ساخت بررسی می شود و تا زمانی که درست نباشد، کد اجرا نمی شود.

    کد باید بصری باشد. فکر می کنم شایان ذکر است که با ساختارهای while و do-while می توانید "حلقه"اگر شرایط خروج از حلقه را ثبت نکنید یا به اشتباه ثبت کنید برنامه را انجام دهید. به مثال بالا نگاه کنید و به این فکر کنید که اگر i++ را به جای i- بنویسم چه اتفاقی می افتد. یا به جای i>0، i<0. Моя программа никогда не вышла бы из цикла и продолжала бы выводить строку Hello world! до тех пор, пока не завис компьютер. Поэтому, будьте очень осторожными с циклами и всегда следите, чтобы из них Ваша программа могла выйти или закончить работу.

    خوب، یک مثال با do-while:

    در این مورد، من فکر می کنم، ما می توانیم مقاله را در مورد آن به پایان برسانیم حلقه ها در جاوا. همانطور که می بینید، طرح ها خیلی پیچیده نیستند، اما بسیار مفید هستند. وقتی با آرایه‌ها و رشته‌ها آشنا می‌شویم، آنها بسیار مفید خواهند بود.

    08/12/17 1.9K

    یک حلقه Java while Do عبارتی است که به شما امکان می دهد یک قطعه کد را چندین بار اجرا کنید. این حلقه می تواند برای تکرار اقدامات در صورت برآورده شدن شرایط استفاده شود.

    حلقه while

    حلقه while ساده ترین راه برای ساخت در زبان جاوا است. از یک کلید while، یک شرط حلقه و یک بدنه حلقه تشکیل شده است:

    while (شرط) ( // بدنه حلقه )

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

    تکرارهای حلقه چیزی را تغییر می‌دهند، و در برخی موارد شرط به false ارزیابی می‌شود، پس از آن حلقه خاتمه می‌یابد. حلقه ای که شرط آن هرگز false برنمی گردد، بی نهایت بار اجرا می شود. به چنین چرخه هایی بی نهایت می گویند.

    مثال

    int num = 0; در حالی که (شماره< 10) { System.out.println(num); num++; }

    این مثال اعداد از 0 تا 9 را خروجی می دهد. بیایید گام به گام کد را مرور کنیم. ابتدا متغیر num را با مقدار 0 مقداردهی اولیه می کنیم. این شمارنده حلقه خواهد بود. وقتی برنامه به while رسید، وضعیت حلقه ارزیابی می شود. در مورد ما 0< 10 возвращает значение true и исполняется тело цикла. Внутри цикла выводится переменная num , а затем увеличивается на 1 . На этом завершается первая итерация.

    پس از اولین "اجرا"، وضعیت Java while Loop برای بار دوم ارزیابی می شود. 1< 10 по-прежнему возвращает true , после чего запускается следующая итерация цикла. Один и тот же процесс повторяется несколько раз.

    تکرار نهایی زمانی شروع می شود که مقدار num 9 باشد. شمارنده حلقه برای آخرین بار چاپ می شود و مقدار آن به 10 افزایش می یابد. این بار، یک تکرار جدید را نمی توان شروع کرد زیرا شرط حلقه به غلط ارزیابی می شود. از آنجایی که 10 کمتر از 10 نیست.

    بنابراین، حلقه تا زمانی اجرا می شود که شرط حلقه برقرار باشد. با داشتن این دانش، می توانید چرخه های پیچیده و کاربردی تری ایجاد کنید. بیایید روی آرایه تکرار کنیم:

    نام رشته = ("Doc"، "Dopey"، "Bashful"، "Grumpy"، "Sneezy"، "Sleepy"، "Happy"); int index = 0; در حالی که (شاخص< names.length) { System.out.println(names); index++; }

    مفهوم این مثال مشابه نمونه قبلی است. شمارنده حلقه را مقداردهی اولیه می کنیم و شروع به تکرار روی آرایه می کنیم تا زمانی که همه عناصر نمایش داده شوند. در نتیجه، تکرار روی آرایه ها بسیار رایج است و جاوا ساختار مناسب تری برای آن دارد، حلقه For.

    حلقه do-while

    حلقه while do جاوا شبیه while است، اما یک تفاوت مهم دارد: برخلاف while، در اینجا شرط در پایان هر تکرار بررسی می‌شود. این بدان معنی است که حلقه do-while همیشه حداقل یک بار اجرا می شود:

    do ( // loop body ) while (condition);

    مثال

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

    اسکنر اسکنر = اسکنر جدید (System.in); حدس رشته؛ do ( System.out.print("Guess the name: "); guess = scanner.nextLine(); ) while (!"Daffy Duck".equals(guess)); System.out.println("تبریک می گویم! اسم من را حدس زدید!");

    در حالی که مثال جاوا از اسکنر برای تجزیه ورودی از system.ini استفاده می کند. این کانال ورودی استاندارد است که در بیشتر موارد با صفحه کلید تعامل دارد. به عبارت ساده، ما فقط متنی را که بازیکن وارد می کند می خوانیم.

    بازی از شما می خواهد که حداقل یک بار از کاربر بپرسید و تا زمانی که بازیکن پاسخ های صحیح را وارد کرده باشد، این کار را انجام دهید. حلقه do-while برای چنین مواردی ایده آل است. در بدنه حلقه مقدار کاربر را می گیریم و سپس صحت پاسخ بررسی می شود. حلقه باید تا زمانی اجرا شود که ورودی کاربر برابر با دافی داک شود. در صورت دریافت پاسخ صحیح، حلقه متوقف می شود و ما پیروزی را به بازیکن تبریک می گوییم.

    در نتیجه

    Java while true loop به شما امکان می دهد چند بار از قطعه کد استفاده کنید. امروز با حلقه های while و do-while جاوا آشنا شدیم. آنها از این نظر شبیه هستند که شرایط را آزمایش می کنند و در صورتی که شرط به درستی ارزیابی شود، بدنه حلقه را اجرا می کنند. اما در عین حال، آنها یک تفاوت قابل توجه دارند: شرط حلقه while قبل از تکرار بررسی می شود و شرط حلقه do-while در پایان هر تکرار بررسی می شود. این بدان معنی است که حلقه do-while همیشه حداقل یک بار اجرا می شود.

    این نشریه ترجمه مقاله " حلقه های while و Do-While جاوا در پنج دقیقه» توسط یک تیم پروژه دوستانه تهیه شده است

    حلقه بخشی از یک برنامه است که چندین بار تکرار می شود.

    دو نوع حلقه در جاوا وجود دارد: نوع "while" و نوع "n-times".

    نوع اول "تا" برای تکرار برخی از اقدامات تا زمانی که شرایطی برآورده شود طراحی شده است. مثال: عددی را 5 عدد افزایش دهید تا سه رقمی شود.

    نوع دوم "n-times" برای تکرار برخی از اقدامات به تعداد از پیش تعیین شده طراحی شده است. مثال: یک عدد را در خودش 4 برابر کنید.

    while Loop (عبارات while و do...while)

    دستور while اقدامات مشخص شده را تا زمانی که پارامتر آن درست باشد تکرار می کند.

    به عنوان مثال، چنین حلقه ای 4 بار اجرا می شود و "1 2 3 4" روی صفحه نمایش داده می شود:

    Int i = 1; در حالی که (من< 5) { System.out.print(i + " "); i++; }

    چنین حلقه ای هرگز اجرا نمی شود و چیزی روی صفحه نمایش داده نمی شود:

    Int i = 1; در حالی که (من< 0) { System.out.print(i + " "); i++; }

    چنین حلقه ای به طور نامحدود اجرا می شود و صفحه نمایش "1 2 3 4 5 6 7 ..." را نشان می دهد:

    Int i = 1; while (true) (System.out.print(i + " ")؛ i++; )

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

    یک حلقه while با وجود دارد پس از تأییدشرایط برای نوشتن آن، ساختی از دستورات do ... while استفاده می شود.

    چنین حلقه ای 4 بار اجرا می شود و "2 3 4 5" روی صفحه نمایش داده می شود:

    < 5);

    چنین حلقه ای 1 بار اجرا می شود و "2" روی صفحه نمایش داده می شود:

    Int i = 1; do (i++; System.out.print(i + ""); ) در حالی که (i< 0);

    بدنه حلقه do...whil حداقل یک بار اجرا می شود. استفاده از این عملگر زمانی مناسب است که برخی از اقدامات در برنامه حداقل یک بار انجام شود، اما در شرایط خاص باید چندین بار تکرار شود.

    برنامه زیر را بررسی کنید (یک عدد صحیح تصادفی را از یک بخش حدس می‌زند و از کاربر می‌خواهد با وارد کردن گزینه‌هایی از صفحه کلید، آن را حدس بزند، تا زمانی که کاربر عدد را حدس بزند، برنامه از او درخواست می‌کند و به او می‌گوید بیشتر یا کمتر از عدد حدس‌زده شده است. از آنچه کاربر وارد کرده است):

    وارد کردن java.util.Scanner. کلاس عمومی Main ( public static void main(string args) ( // prog - عدد ایجاد شده توسط برنامه // user - عدد وارد شده توسط کاربر int prog, user؛ // یک عدد صحیح تصادفی از 1 تا 10 prog = (int)(ریاضی تصادفی() * 10) + 1; System.out.println("من یک عدد از 1 تا 10 را حدس زدم، حدس بزنید."); System.out.print("شماره خود را وارد کنید:") ؛ ورودی اسکنر = Scanner جدید( System.in)؛ // بررسی کنید که آیا یک عدد صحیح در جریان ورودی وجود دارد if(input.hasNextInt()) ( انجام دهید ( // یک عدد صحیح از کاربر جریان ورودی بخوانید = input.nextInt( )؛ if(user == prog) ( System.out.println ("شما حدس زدید!")؛ ) else ( // بررسی کنید که آیا عدد در محدوده if است (user > 0 && user)<= 10) { System.out.print("Вы не угадали! "); // Если число загаданное программой меньше... if(prog < user) { System.out.println("Моё число меньше."); } else { System.out.println("Моё число больше."); } } else { System.out.println("Ваше число вообще не из нужного отрезка!"); } } } while(user != prog); } else { System.out.println("Ошибка. Вы не ввели целое число!"); } System.out.println("До свиданья!"); } }

    تغییرات زیر را در برنامه اعمال کنید:

      برنامه باید عددی را نه از بخش، بلکه یک عدد صحیح از بخش [-10;10]، بدون احتساب صفر، در نظر بگیرد. در عین حال، سعی کنید اطمینان حاصل کنید که توزیع اعداد تصادفی تولید شده توسط برنامه یکنواخت است (یعنی در صورت افتادن یک صفر، نمی توان آن را به سادگی با عدد دیگری جایگزین کرد، به عنوان مثال، با 1، زیرا پس از آن 1 است. با احتمال دو برابر بیشتر از بقیه اعداد سقوط می کند).

      اگر برنامه عدد مثبت را حدس زد و کاربر عدد منفی را وارد کرد، برنامه باید به کاربر بگوید که در علامت اشتباه کرده است. و بالعکس.

    نوع حلقه "n-times" (عبارت برای)

    دستور for شامل سه پارامتر است. اولی مقداردهی اولیه، دومی شرط تکرار و سومی تکرار است.

    برای (آغاز کردن؛ شرط؛ تکرار) (// بدنه حلقه، یعنی اعمالی که به صورت چرخه‌ای تکرار می‌شوند)

    در پارامتر اول معمولاً متغیری انتخاب می شود که با کمک آن تعداد تکرارهای حلقه شمارش می شود. به آن شمارنده می گویند. به شمارنده مقداری اولیه داده می شود (آنها نشان می دهند که از چه مقداری تغییر خواهد کرد).

    در پارامتر دوم، محدودیتی در شمارنده نشان داده شده است (آنها نشان می دهند که به چه مقدار تغییر می کند).

    پارامتر سوم عبارتی را مشخص می کند که شمارنده را بعد از هر مرحله از حلقه تغییر می دهد. معمولاً این یک افزایش یا کاهش است، اما می‌توانید از هر عبارتی استفاده کنید که مقدار جدیدی به شمارنده اختصاص داده شود.

    قبل از اولین مرحله حلقه، مقدار اولیه به شمارنده اختصاص داده می شود (آغازسازی انجام می شود). این فقط یک بار اتفاق می افتد.

    قبل از هر مرحله از حلقه (اما بعد از مقداردهی اولیه)، شرط تکرار بررسی می شود، اگر درست باشد، بدنه حلقه یک بار دیگر اجرا می شود. در عین حال، اگر شرط در زمان بررسی اول نادرست باشد، ممکن است بدنه حلقه حتی یک بار هم اجرا نشود.

    پس از اتمام هر مرحله از حلقه و قبل از شروع مرحله بعدی (و بنابراین، قبل از بررسی شرایط تکرار)، یک تکرار انجام می شود.

    برنامه زیر اعداد 1 تا 100 را روی صفحه چاپ می کند:

    برای (int i = 1; i<= 100; i++) { System.out.print(i + " "); }

    برنامه زیر اعداد 10 تا 10 را روی صفحه چاپ می کند:

    برای (int s = 10; s > -11; s--) ( System.out.print(s + " ")؛ )

    برنامه ارائه شده اعداد فرد از 1 تا 33 را نمایش می دهد:

    برای (int i = 1; i<= 33; i = i + 2) { System.out.print(i + " "); }

    برنامه ارائه شده مجموع عناصر قطعه دنباله 2، 4، 6، 8، ... 98، 100 را محاسبه می کند.

    int sum = 0; // در اینجا ما نتیجه را برای (int j = 2; j

    برنامه ارائه شده یک عدد را از یک متغیر افزایش می دهد آبه توان طبیعی از متغیر n:

    دو برابر a = 2; int n = 10; دو برابر = 1; // در اینجا ما نتیجه را برای (int i = 1; i<= n; i++) { res = res * a; } System.out.println(res);

    برنامه ارائه شده 10 عنصر اول دنباله 2n+2 را نمایش می دهد که در آن n=1، 2، 3…

    برای (int i = 1; i< 11; i++) { System.out.print(2*i + 2 + " "); }

    برنامه ارائه شده 10 عنصر اول دنباله 2a n-1 +3 را نمایش می دهد که در آن 1 =3:

    Int a = 3; برای (i=1; i<=10;i++) { System.out.print(a + " "); a = 2*a + 3; }

    در یک چرخه، می توانید چندین شمارنده را به طور همزمان تنظیم کنید. در این مورد، چندین عبارت در تکرار و مقداردهی اولیه با کاما از هم جدا می شوند. شما می توانید تنها یک شرط تکرار را مشخص کنید، اما می تواند یک عبارت حاوی چندین شمارنده در یک زمان باشد.

    برنامه ارائه شده 10 عنصر اول دنباله 2a n−1 -2 را نمایش می دهد که در آن 1 =3:

    برای (int a=3, i=1; i<=10; a=2*a-2, i++) { System.out.print(a + " "); }

    برنامه ارائه شده دنباله زیر "0 -1 -4 -9 -16 -25" را نمایش می دهد:

    برای (int a=0، b=0؛ a-b<=10; a++, b--) { System.out.print(a*b + " "); }

    خاتمه زودهنگام حلقه (عبارت شکست)

    اگر با اپراتور داخل بدنه حلقه تماس بگیرید، هم حلقه نوع "while" و هم حلقه نوع "n-times" می توانند زودتر از موعد مقرر تکمیل شوند. زنگ تفريح. در این حالت، یک خروج فوری از حلقه اتفاق می‌افتد، حتی مرحله فعلی تکمیل نمی‌شود (یعنی اگر دستورات دیگری پس از استراحت وجود داشته باشد، اجرا نمی‌شوند).

    در نتیجه مثال زیر، فقط اعداد "1 2 3 4 پایان" روی صفحه نمایش داده می شود:

    برای (int a=1; a

    وقتی برنامه برای بار پنجم حلقه را اجرا کرد (با شمارنده ای برابر با 5 وارد حلقه می شود)، بلافاصله بررسی می شود و شرط اجرای دستور break درست خواهد بود. بقیه بدنه حلقه (خروجی به صفحه) دیگر تولید نمی شود: برنامه بلافاصله به اجرای عملیات مشخص شده بعد از حلقه و فراتر از آن ادامه می دهد.

    با کمک دستور break، می توانید یک حلقه نامحدود را به عمد قطع کنید. به عنوان مثال (صفحه نمایش "100 50 25 12 6 3 1 0" را نشان می دهد و پس از آن حلقه متوقف می شود):

    int s = 100; while (true) (System.out.print(s + "")؛ s = s / 2؛ if(s == 0) ( break; ) )

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

    int a; برای (a=25; a>0; a--) ( break; System.out.print(a + " "); ) System.out.print("a=" + a);

    در مثال بالا، خروجی در حلقه به صفحه نمایش حتی یک بار و زمانی که متغیر رخ نمی دهد آبعد از حلقه روی صفحه نمایش داده می شود، معلوم می شود که مقدار آن هرگز تغییر نکرده است، یعنی "a=25" (و هیچ چیز دیگری) نمایش داده نمی شود.

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

    وظایف

      برنامه ای بنویسید که تمام اعداد چهار رقمی را به ترتیب 1000 1003 1006 1009 1012 1015 نمایش دهد.

      برنامه ای بنویسید که 55 عنصر اول دنباله 1 3 5 7 9 11 13 15 17 را نمایش دهد.

      برنامه ای بنویسید که تمام عناصر غیر منفی دنباله 90 85 80 75 70 65 60 را نمایش دهد.

      برنامه ای بنویسید که 20 عنصر اول دنباله 2 4 8 16 32 64 128 را نمایش دهد.

      تمام عبارات دنباله 2a n-1 -1 را چاپ کنید، جایی که a 1 =2، که کمتر از 10000 هستند.

      تمام عبارت های دو رقمی دنباله 2a n-1 +200 را چاپ کنید، جایی که a 1 = -166 است.

      برنامه ای بنویسید که فاکتوریل یک عدد طبیعی n را که کاربر از صفحه کلید وارد می کند محاسبه کند.

      نمایش تمام مقسوم علیه های مثبت یک عدد طبیعی که کاربر از صفحه کلید وارد کرده است.

      بررسی کنید که آیا عدد طبیعی وارد شده توسط کاربر از صفحه کلید اول است یا خیر. سعی کنید اقدامات غیر ضروری را انجام ندهید (مثلاً پس از یافتن حداقل یک مقسوم‌گیرنده غیر ضروری، از قبل مشخص شده است که عدد مرکب است و نیازی به ادامه بررسی ندارید). همچنین توجه داشته باشید که کوچکترین مقسوم علیه یک عدد طبیعی n، در صورت وجود، لزوماً در قطعه قرار دارد.

      برنامه ای بنویسید که 12 عنصر اول دنباله 2a n-2 -2 را نمایش دهد، جایی که a 1 =3 و a 2 =2 است.

      ۱۱ عبارت اول دنباله فیبوناچی را نمایش دهید. یادآوری می کنیم که جمله های اول و دوم دنباله برابر با یک هستند و هر مورد بعدی مجموع دو مورد قبلی است.

      برای یک عدد طبیعی که کاربر از صفحه کلید وارد می کند، مجموع تمام ارقام آن را محاسبه کنید (از قبل مشخص نیست که تعداد چند رقم خواهد بود).

      در شهر N، سفر با تراموا با بلیط های کاغذی پاره انجام می شود. هر هفته، دپوی تراموا یک رول بلیت با اعداد 000001 تا 999999 از چاپخانه محلی سفارش می دهد.بلیت "خوش شانس" بلیطی است که مجموع سه رقم اول عدد برابر با مجموع آخرین رقم باشد. سه رقمی، به عنوان مثال، در بلیط های با شماره 003102 یا 567576. انبار تراموا تصمیم گرفت به صاحب هر بلیط خوش شانس یک سوغات بدهد و اکنون در حال تعجب است که چه تعداد سوغاتی لازم است. با استفاده از برنامه، شمارش کنید که چند بلیط شانس در یک رول وجود دارد؟

      شهر N دارای یک انبار بزرگ با 50000 قفسه مختلف است. برای راحتی کارگران، مدیریت انبار تصمیم گرفت برای هر قفسه در چاپخانه محلی یک پلاک با شماره 00001 تا 50000 سفارش دهد، اما وقتی صفحات چاپ شد، معلوم شد که چاپخانه شماره 2 را چاپ نکرده است. به دلیل نقص، بنابراین تمام صفحاتی که حاوی یک یا چند دو (مثلاً 00002 یا 20202) هستند - باید دوباره تایپ شوند. برنامه ای بنویسید که تعداد این صفحات اشتباه در یک لات معیوب را شمارش کند.

      ساعت الکترونیکی زمان را در قالب از 00:00 تا 23:59 نشان می دهد. محاسبه کنید که چند بار در روز یک ترکیب متقارن در سمت چپ روده بزرگ برای ترکیب سمت راست روده بزرگ نشان داده می شود (مثلاً 02:20، 11:11 یا 15:51).

      در ارتش آمریکا، عدد 13 بدشانس و در ژاپنی ها - 4 در نظر گرفته می شود. قبل از تمرینات بین المللی، ستاد ارتش روسیه تصمیم گرفت شماره تجهیزات نظامی حاوی اعداد 4 یا 13 را حذف کند (به عنوان مثال، 40123، 13313، 12345 یا 13040) تا شرمنده همکاران خارجی نشود. اگر ارتش 100000 واحد تجهیزات نظامی در اختیار داشته باشد و هر خودروی رزمی دارای شماره 00001 تا 99999 باشد، پس چند عدد باید حذف شود؟

    2010، الکسی نیکولاویچ کوستین. گروه TIDM دانشکده ریاضی دانشگاه دولتی آموزشی مسکو.

    آخرین به روز رسانی: 31.10.2018

    نوع دیگری از ساختارهای کنترل حلقه ها هستند. چرخه ها بسته به شرایط خاص اجازه می دهند تا یک عمل خاص را چندین بار انجام دهند. زبان جاوا دارای انواع حلقه های زیر است:

    برای حلقه

    حلقه for دارای تعریف رسمی زیر است:

    برای ([تغییر شمارشگر]؛ [شرط]؛ [تغییر شمارنده]) ( // اقدامات )

    یک استاندارد برای حلقه در نظر بگیرید:

    برای (int i = 1; i< 9; i++){ System.out.printf("Квадрат числа %d равен %d \n", i, i * i); }

    اولین قسمت از اعلان حلقه، int i = 1، شمارنده i را ایجاد و مقداردهی اولیه می کند. لازم نیست شمارنده از نوع int باشد. این می تواند هر نوع عددی دیگری باشد، مانند شناور. قبل از اجرای حلقه، مقدار شمارنده برابر با 1 خواهد بود. در این حالت، این همان اعلان متغیر است.

    قسمت دوم شرایطی است که در آن حلقه اجرا می شود. در این حالت، حلقه تا زمانی که i به عدد 9 برسم اجرا می شود.

    و قسمت سوم افزایش شمارنده یک عدد است. باز هم لازم نیست یک عدد افزایش دهیم. می توانید کاهش دهید: i--.

    در نتیجه بلوک حلقه 8 بار اجرا می شود تا مقدار i برابر با 9 شود و هر بار این مقدار 1 افزایش می یابد.

    لازم نیست هنگام اعلام یک حلقه، همه شرایط را مشخص کنیم. به عنوان مثال می توانیم اینگونه بنویسیم:

    Int i = 1; for (; ;)( System.out.printf("مربع %d %d \n است"، i، i * i)؛ )

    تعریف چرخه ثابت می ماند، فقط اکنون بلوک های موجود در تعریف خالی هستند: برای (; ;) . اکنون هیچ متغیر شمارنده اولیه، هیچ شرطی وجود ندارد، بنابراین حلقه برای همیشه اجرا می شود - یک حلقه بی نهایت.

    یا می توانید تعدادی از بلوک ها را حذف کنید:

    Int i = 1; برای (;i<9;){ System.out.printf("Квадрат числа %d равен %d \n", i, i * i); i++; }

    این مثال معادل مثال اول است: یک شمارنده نیز داریم، فقط خارج از حلقه ایجاد می شود. ما یک شرط اجرای حلقه داریم. و یک افزایش از شمارنده در حال حاضر در خود بلوک for وجود دارد.

    حلقه for می تواند چندین متغیر را به طور همزمان تعریف و مدیریت کند:

    int n = 10; for(int i=0، j = n - 1; i< j; i++, j--){ System.out.println(i * j); }

    انجام حلقه

    حلقه do ابتدا کد حلقه را اجرا می کند و سپس شرایط موجود در دستور while را بررسی می کند. و در حالی که این شرط درست است، چرخه تکرار می شود. مثلا:

    int j = 7; do( System.out.println(j); j--; ) while (j > 0);

    در این حالت کد حلقه 7 بار اجرا می شود تا j صفر شود. توجه به این نکته ضروری است که حلقه do تضمین می کند که اقدامات حداقل یک بار اجرا می شوند، حتی اگر شرط موجود در دستور while درست نباشد. بنابراین، می توانیم بنویسیم:

    int j = -1; do( System.out.println(j); j--; ) while (j > 0);

    حتی اگر j در ابتدا کمتر از 0 باشد، حلقه همچنان یک بار اجرا می شود.

    حلقه while

    حلقه while بلافاصله درستی یک شرط را بررسی می کند و اگر شرط درست باشد، کد حلقه اجرا می شود:

    int j = 6; while (j > 0)( System.out.println(j); j--; )

    ادامه و شکستن عبارات

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

    مثلا:

    < nums.length; i++){ if (nums[i] >10) شکستن؛ System.out.println(nums[i]); )

    از آنجایی که حلقه بررسی می کند که آیا عنصر آرایه بزرگتر از 10 است، ما دو عنصر آخر را در کنسول نخواهیم دید، زیرا زمانی که nums [i] بزرگتر از 10 (یعنی برابر با 12) باشد، دستور break کار خواهد کرد. و حلقه به پایان می رسد.

    درست است، ما آخرین عنصر را که کمتر از 10 است نیز نخواهیم دید. حالا آن را طوری می سازیم که اگر عدد بزرگتر از 10 باشد، حلقه تمام نمی شود، بلکه به سادگی به عنصر بعدی می رود. برای این کار از عبارت continue استفاده می کنیم:

    int nums = int جدید ( 1، 2، 3، 4، 12، 9); برای (int i = 0; i< nums.length; i++){ if (nums[i] >10) ادامه دهید؛ System.out.println(nums[i]); )

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

    در این آموزش، ما یاد خواهیم گرفت که چگونه با مشاهده انواع مختلف حلقه ها، قسمت هایی از کد خود را به صورت کنترل شده مجددا اجرا کنیم. جاوا. درباره چرخه ها بیشتر بدانید: در حالی که, انجام دادن-در حالی که, برای. ما سعی خواهیم کرد تعیین کنیم که کدام یک از چرخه ها برای استفاده مناسب تر است.

    سپس نگاهی کوتاه به مبحث اعداد تصادفی خواهیم داشت ( تصادفیشماره). بیایید نگاهی بیندازیم به جاوا-کلاس تصادفیو چگونه او می تواند در بازی ما به ما کمک کند.

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

    حلقه while

    چرخه در حالی کهساده ترین نحو را دارد. یاد آوردن اگر- دستورالعمل هایی که کمی پیشتر مطالعه کردیم. در یک عبارت عملگر شرطی اگر(آنچه در داخل پرانتز بعد از کلمه آمده است اگر) تقریباً می توانید هر ترکیبی از عملگرها و متغیرها را قرار دهید. اگر عبارت درست باشد ( درست است، واقعی، سپس کدی که در بدنه بلوک محصور شده است اگراجرا خواهد شد. به طور مشابه، در یک چرخه در حالی کهما عبارتی قرار می دهیم که بتوان آن را ارزیابی کرد درست است، واقعییا نادرست، همانطور که در این کد نشان داده شده است:

    int x = 10; while(x> 0)(x--; //x با هر تکرار حلقه یک بار کاهش می یابد)

    اینجا چه خبره؟ اولین چیزی که خارج از حلقه است در حالی کهیک متغیر اعلام کردیم ایکسنوع بین المللیو این را اختصاص داد مقدار متغیر"10". سپس چرخه شروع می شود در حالی که، در شرایطی که نوشته شده است x > 0”- این بدان معنی است که کد نوشته شده در بدنه حلقه در حالی کهتا زمانی که متغیر اجرا می شود ایکسبیشتر 0 و شرط به مقدار نمی رسد نادرست. بنابراین، کد 10 بار اجرا می شود (x=10,x>0 ; x=9,x>0 ; x=8,x>0 ; x=7,x>0 ; x=6,x>0 ; x=5،x>0؛ x=4،x>0؛ x=3،x>0؛ x=2،x>0؛ x=1،x>0). در پاس اول حلقه x=10، در دوم 9 ، در سوم 8 و غیره. و وقتی که ایکسبرابر خواهد بود 0 ، در این صورت شرط ورود به حلقه انجام نمی شود و پس از پایان حلقه برنامه از خط بعدی ادامه می یابد.

    مانند اپراتور اگر، وضعیتی ممکن است که در آن حلقه حتی یک بار هم اجرا نشود. به مثال زیر دقت کنید:

    int x = 10; while(x > 10)( //برخی کد //اما تا زمانی که x بزرگتر از 10 نشود هرگز اجرا نمی شود)

    علاوه بر این، هیچ محدودیتی در پیچیدگی عبارت شرط یا مقدار کدی که می توان در بدنه حلقه نوشت وجود ندارد:

    int playerLives = 3; int alienShips = 10; while(playerLives >0 && alienShips >0)( //همه کدهای بازی در اینجا //... //... // و غیره ) //برنامه زمانی که playerLives یا alienShips = 0 در اینجا ادامه خواهد داشت

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

    شایان ذکر است که پس از ورود برنامه به بدنه حلقه، حتی اگر شرط حلقه تبدیل شود، اجرا خواهد شد. نادرست، جایی در بدنه حلقه، زیرا شرایط فقط در هنگام ورود بررسی می شود:

    int x = 1; while(x > 0)(x--; //x اکنون 0 است و شرط دفعه بعد به false ارزیابی می شود //اما این خط اجرا می شود //و این یکی //و حتی این یکی)

    در مثال بالا، بدنه حلقه یک بار اجرا می شود. علاوه بر این، می توانید شرطی را تنظیم کنید تا حلقه برای همیشه اجرا شود - این نامیده می شود چرخه بی پایانبه عنوان مثال:

    int x = 0; while(true)(x++; //من واقعا بزرگ خواهم شد!)

    از چرخه آنها خارج شوید. کلمه کلیدی زنگ تفريح

    اگر واقعاً نیاز به استفاده داشته باشیم چه می شود حلقه بی پایان، اما برای اینکه بتوانیم تصمیم بگیریم چه زمانی از آن خارج شویم. برای این منظور در جاوایک کلمه کلیدی وجود دارد زنگ تفريح. ما میتوانیم استفاده کنیم زنگ تفريحزمانی که باید از حلقه "خروج" کنیم:

    int x = 0; while(true)(x++; //من خیلی بزرگ خواهم شد!

    مطمئناً قبلاً حدس زده اید که امکان ترکیب ابزارهای مختلف تصمیم گیری مانند اگر،دیگر،تعویضداخل حلقه ما در حالی کهو چرخه های دیگر که در زیر بررسی خواهیم کرد. به عنوان مثال:

    int x = 0; int tooBig = 10; while(true)(x++; //بسیار بزرگ خواهم شد! if(x == tooBig)( break; //نه، این کار را نمی کنید. ) //کد در اینجا تا زمانی که x به 10 برسد در دسترس خواهد بود.

    شما می توانید بسیاری از تغییرات مختلف را یادداشت کنید، اما برای ما مهمتر است استفاده عملیاین دانش، بنابراین ما در حال حاضر به عمق نخواهیم رفت. بیایید به مفهوم دیگری نگاه کنیم که می تواند در یک حلقه عمل کند.

    کلمه کلیدی ادامه هید

    ادامه هیدتقریباً مشابه کار می کند زنگ تفريح. کلمه کلیدی ادامه هیدشما را از بدنه حلقه خارج می کند، اما سپس عبارت شرطی را بررسی کنید، به جای اینکه از جایی که پس از بسته شدن پرانتز حلقه متوقف شد، ادامه دهید، همانطور که در مورد اتفاق می افتد زنگ تفريح. مثال زیر کاربرد را نشان می دهد ادامه هید:

    int x = 0; int tooBig = 10; int tooBigToPrint = 5; while(true)(x++; //من خیلی بزرگ خواهم شد! if(x == tooBig)( break; ) //نه، این کار را نمی کنید. //کد در اینجا فقط تا زمانی که x 10 شود در دسترس خواهد بود if(x > = tooBigToPrint)( //دیگر روی صفحه چاپ نمی شود، اما حلقه ادامه می یابد؛ ) //کد در اینجا تا زمانی که x 5 شود در دسترس خواهد بود //کد برای چاپ x روی صفحه )

    توضیح: ما متغیرها را اعلام و مقداردهی اولیه می کنیم. ما به حلقه می رویم - به مقدار متغیر اضافه می کنیم ایکسواحد (اکنون ایکس= 1). علامت زدن "1 است 10؟" - نادرست- اپراتور اول اگرانجام نمی شود. بررسی بعدی"آیا 1 بزرگتر یا مساوی 5 است؟" - نادرست- اپراتور دوم اگرانجام نمی شود. خروجی ایکسبه صفحه نمایش

    موردی را در نظر بگیرید که ایکسهنگام ورود به حلقه، مقدار 5 را می گیرد. ما به حلقه می رویم - به مقدار متغیر اضافه می کنیم ایکسواحد (اکنون ایکس= 6). علامت زدن "6 است 10؟" - نادرست- اپراتور اول اگرانجام نمی شود. بررسی بعدی این است که "6 بزرگتر یا مساوی 5 است؟" - درست است، واقعی- وارد بدن شود اگرادامه هید، از حلقه خارج شده و شرایط ورود حلقه را بررسی کنید.

    حالا گزینه کی است ایکسهنگام وارد کردن حلقه مقدار 9 را می گیرد. ما به حلقه می رویم - به مقدار متغیر اضافه می کنیم ایکسواحد (اکنون ایکس= 10). علامت زدن "10 است 10؟" - درست است، واقعی- وارد بدن شود اگرزنگ تفريح، از حلقه خارج شوید و کد در پشت بند بسته شدن حلقه ادامه می یابد در حالی که.

    حلقه do-while

    تقریباً مانند حلقه قبلی، به جز یک ویژگی - عبارت شرطی بعد از بدنه حلقه بررسی می شود. این بدان معنی است که چرخه انجام دادن-در حالی کههمیشه حداقل یک بار اجرا می شود. به یک مثال نگاه کنید:

    int x = 0; انجام دهید (x++;) while(x< 10); //x теперь = 10

    کلید واژه ها زنگ تفريح،ادامه هید

    برای حلقه

    چرخه برایدارای نحو پیچیده تری نسبت به در حالی کهو انجام دادن-در حالی که، از آنجایی که برای مقداردهی اولیه آن نیاز به دستکاری بیشتر است. بیایید ابتدا نگاهی به آن بیندازیم و سپس آن را تکه تکه کنیم:

    برای (int i = 0; i< 10; i++){ //Что-то, что должно произойти 10 раз будет записано здесь }

    کامپایلر آن را چگونه می بیند؟ مثل این:

    برای (اعلان و مقداردهی اولیه؛ شرط؛ تغییر پس از هر بار تکرار حلقه) ( // بدنه حلقه )

    • اعلان و مقداردهی اولیه- ما یک جدید ایجاد کردیم متغیر نوع بین المللیبا نام منو به آن مقدار اختصاص داد 0 ;
    • وضعیت- مانند سایر چرخه هایی که قبلاً بحث شد، در اینجا شرایط ورود به چرخه را بررسی می کنیم. اگر مقدار به صورت محاسبه شود درست است، واقعی، سپس وارد بدنه حلقه می شویم.
    • تغییر دادن بعد از هر چرخه- در مثال بالا من++ یعنی بعد از پاس بعدی حلقه به مقدار متغیر می رسیم منیک (1) اضافه کنید. علاوه بر این، می توانیم در متغیر تغییر و بنویسیم منبرای تفریق یک، به عنوان مثال:
    برای (int i = 10; i > 0; i--) ( // شمارش معکوس ) //کلید برای شروع، i = 0

    کلید واژه ها زنگ تفريح،ادامه هیدهمچنین می تواند در این چرخه استفاده شود.

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