آشنایی با ساختار حلقۀ while در زبان برنامه‌نویسی جاوا


در آموزش قبل با مفهوم حلقه‌ها و کاربر آن‌ها در برنامه‌نویسی آشنا شدیم و نحوۀ پیاده‌سازی یکی از انواع آن‌ها تحت عنوان حلقۀ for در زبان برنامه‌نویسی جاوا را بررسی نمودیم. حال در این آموزش قصد داریم تا نوع دیگری حلقه‌ها به نام while را معرفی نموده و کاربرد آن در نحوۀ انجام تَسک‌هایی که نیاز به تکرار دارند را تشریح نماییم.

به طور کلی، بیشترین وجه تمایز حلقه‌های for و while تفاوت ساختاری آن‌ها است به طوری که در حلقه‌ای از جنس while بر خلاف حلقۀ for ابتدا به ساکن می‌باید متغیر مورد نظر را تعریف نماییم سپس داخل علائم ( ) در مقابل دستور while شرط مربوطه یا همان نقطۀ پایانی حلقه را بنویسیم و در ادامه داخل علائم { } مقدار افزایشی برای متغیر مورد نظر در هر بار تکرار حلقه را تعریف کنیم.

برای روشن‌تر شدن مطالب فوق، پروژه‌ای تحت عنوان WhileLoop ایجاد کرده سپس یک کلاس تحت عنوان WhileLoop در آن می‌سازیم و برای پیاده‌سازی مثالی به منظور چاپ اعداد با شروع از عدد 1 تا 10، کدی به صورت زیر در آن پیاده‌سازی می‌کنیم:

public class WhileLoop {
    public static void main(String[] args) {
        int number = 1;
        while (number <= 10) {
            System.out.println("My Number Is: " + number);
        }
    }
}

همان‌طور که مشاهده می‌کنیم، با به‌کارگیری دیتا تایپ int متغیری تحت عنوان number خارج از حلقۀ while تعریف کرده‌ایم و مقدار اولیۀ آن را معادل عدد 1 قرار داده‌ایم سپس ساختار حلقۀ while را بدین صورت پیاده‌سازی کرده‌ایم که کیورد while را نوشته و در ادامه دو علامت ( ) قرار داده و داخل آن‌ها شرط حلقۀ while یا همان نقطۀ پایانی حلقه را درج کرده‌ايم و بدین ترتیب گفته‌ایم حلقۀ مذکور تا زمانی ادامه یابد که مقدار اختصاص‌یافته به متغیر number کوچک‌تر از 10 یا برابر با آن باشد. در ادامه، علائم { } را به منظور نوشتن دستورات مرتبط با حلقۀ while درج کرده و داخل آن‌ها نیز دستوری مبنی بر چاپ مقدار منتسب به متغیر number به همراه استرینگ «:My Number Is» در کنسول نوشته‌ایم. بنابراین با اجرای برنامۀ فوق انتظار داریم تا زمانی که مقدار متغیر number کوچک‌تر یا مساوی با عدد 10 باشد، این حلقه اجرا شود. حال برنامۀ فوق را اجرا کرده و در خروجی داریم:

My Number Is: 1
My Number Is: 1
My Number Is: 1
My Number Is: 1
My Number Is: 1
My Number Is: 1
My Number Is: 1
My Number Is: 1
My Number Is: 1
.
.
.

در حقیقت، در حلقۀ while برنامۀ فوق مقدار افزایشی متغیر number در هر بار تکرار حلقه را تعریف نکرده‌ایم و از همین روی حلقۀ مذکور تا بی‌نهایت ادامه می‌یابد که برای رفع این مشکل نیاز داریم تا مقدار افزایشی متغیر مد نظر در هر بار تکرار حلقه را به برنامۀ فوق اضافه نماییم.

نکته‌ای که در اینجا می‌باید مد نظر قرار دهیم این است که در حلقۀ while بر خلاف حلقۀ for پارامتر مربوط به مقدار افزایشی داخل علائم { } نوشته می‌شود به علاوه اینکه محل قرارگیری دستور مربوط به مقدار افزایشی در نحوۀ اجرای برنامه و نتیجۀ حاصل در خروجی بسیار تعیین‌کننده است. برای روشن شدن این نکته، کد فوق را به شکل زیر تکمیل می‌کنیم:

public class WhileLoop {
    public static void main(String[] args) {
        int number = 1;
        while (number <= 10) {
            number++;
            System.out.println("My Number Is: " + number);
        }
    }
}

در کد فوق، همچون مثال پیشین و با استفاده از دیتا تایپ int متغیری به نام number تعریف کرده و قصد داریم تا با استفاده از حلقۀ while مقادیر منتسب به آن را تا رسیدن به عدد 10 به همراه با استرینگ «:My Number Is» در کنسول چاپ نماییم که به منظور تعریف پارامتر مربوط به مقدار افزایشی، دستور سطر پنجم را به کد خود اضافه کرده‌ایم به طوری که با اجرای برنامۀ فوق در خروجی داریم:

My Number Is: 2
My Number Is: 3
My Number Is: 4
My Number Is: 5
My Number Is: 6
My Number Is: 7
My Number Is: 8
My Number Is: 9
My Number Is: 10
My Number Is: 11

در کد فوق، ابتدا عدد 1 به متغیر number اختصاص داده شده سپس شرط حلقه چک می‌شود که آیا مقدار منتسب به متغیر number کوچک‌تر از 10 یا مساوی با آن است یا خیر که می‌بینیم شرط برقرار بوده و دستورات داخلی آن اجرا می‌شوند و ابتدا یک واحد به مقدار قبلیِ منتسب به متغیر number افزوده شده و مقدار جدید معادل عدد 2 بدان منتسب می‌شود سپس دستور سطر بعد اجرا می‌شود که اجرای این دستور منجر به چاپ عدد 2 به همراه استرینگ مذکور در کنسول می‌گردد.

حال مجدداً حلقه تکرار شده و مقدار جدید منتسب به متغیر number معادل عدد 2 چک می‌شود تا بررسی شود که مقدار آن کوچک‌تر از 10 یا مساوی با آن است یا خیر که باز هم شرط برقرار بوده و دستورات داخلی حلقه اجرا می‌شوند و بدین ترتیب مقدار متغیر number یک واحد افزایش یافته و مقدار جدید معادل عدد 3 بدان منتسب شده و با اجرای دستور سطر بعد به همراه استرینگ مربوطه در کنسول چاپ می‌شوند.

این فرآیند تا زمانی ادامه می‌یابد که مقدار منتسب به متغیر number برابر با عدد 10 شده و مجدداً شرط حلقۀ while برقرار بوده و دستورات داخلی آن اجرا می‌شوند و بدین ترتیب مقداری معادل عدد 11 به متغیر مذکور اختصاص یافته و مقدار جدید به همراه استرینگ «:My Number Is» در کنسول چاپ می‌شود و در ادامه مجدداً شرط حلقۀ while چک می‌شود که مقدار اختصاص‌یافته به متغیر number برابر با عدد 11 بوده و شرط حلقه برابر با مقدار بولین false ارزیابی شده و در نتیجه مفسر از حلقه خارج می‌شود. 

اکنون جای دستور مربوط به مقدار افزایشی در كد فوق را تغيير می‌دهیم و آن را به سطر ششم منتقل می‌کنیم که بدین ترتیب برنامۀ فوق را به صورت زیر بازنویسی می‌کنیم:

public class WhileLoop {
	public static void main(String[] args) {
		int number = 1;
		while (number <= 10) {
			System.out.println("My Number Is: " + number);
			number++;
		}
	}
}

برنامۀ فوق را اجرا کرده و در خروجی خواهیم داشت:

My Number Is: 1
My Number Is: 2
My Number Is: 3
My Number Is: 4
My Number Is: 5
My Number Is: 6
My Number Is: 7
My Number Is: 8
My Number Is: 9
My Number Is: 10

همان‌طور که ملاحظه می‌کنیم، خروجی برنامۀ فوق با مثال پیشین کاملاً متفاوت است که برای روشن شدن این وجه تمایز به بررسی خط‌به‌خط کد فوق می‌پردازیم. در واقع، پس از اجرای برنامه مقدار اولیۀ 1 به متغیر number اختصاص داده شده و شرط حلقۀ while مبنی بر کوچک‌تر بودن مقدار منتسب به این متغیر از عدد 10 یا برابر بودن با آن برقرار بوده و از همین روی دستورات داخلی آن اجرا شده و در ابتدا مقدار منتسب به متغیر number معادل عدد 1 به همراه استرینگ مربوطه در کنسول چاپ می‌شود و در ادامه یک واحد به متغیر number افزوده شده و مقدار جدیدی معادل عدد 2 بدان منتسب شده و حلقۀ while مجدداً تکرار شده و در ابتدا چک می‌شود که مقدار متغیر number کوچک‌تر از 10 يا برابر با آن است يا خير كه شرط برقرار بوده و عدد 2 به همراه استرينگ مذكور در كنسول چاپ می‌گردد.

فرآیند فوق‌الذکر تا زمانی ادامه می‌يابد كه مقدار اختصاص‌یافته به متغیر number برابر با عدد 10 بوده و شرط حلقه برابر با true ارزیابی شده و از همین روی عدد 10 به همراه استرینگ «:My Number Is» در کنسول چاپ شده و در ادامه یک واحد به آن افزوده می‌شود که در نتیجه مقدار جدیدی معادل عدد 11 بدان منتسب شده سپس حلقه مجدداً تکرار می‌شود اما این بار شرط حلقۀ while برقرار نبوده و در نتیجه مفسر از حلقه خارج می‌شود.

دانلود فایل‌های تمرین

لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان
sobhan_Ssh
sobhan_Ssh
۱۳۹۵/۰۹/۰۷
با سلام
یه سوال داشتم ، من به جای دستور ;++number از دستور ;++number=number استفاده کردم و خروجی نهایی من کاملا با چیزی که انتضار داشتم متفاوت شد ، میخواستم بدون مچه تفاوتی میان این دو دستور وجود داره؟؟
با تشکر
کاربر میهمان
وحیدمن یک کاربر مهمان هستم
۱۳۹۴/۰۸/۱۷
یه سوال دیگه برام پیش اومد....از طریق حلقه ی while مگه نمیشه تعداد دوره حلقه رو مشخص کرد....تو همین مثال اخر مشخص کردیم خودمون که number کوچکتر مساوی 10 است پس لوپ تا عدد 10 ادامه داره.....درسته؟؟؟؟؟؟
کاربر میهمان
وحیدمن یک کاربر مهمان هستم
۱۳۹۴/۰۸/۱۶
یه سوال داشتم....از اونجا که حلقه ی while و for فقط از لحاظ ساختاری با هم فرق دارن...و چون اسونتر میشه کد برای for نوشت....میشه فقط از حلقه ی for استفاده کنیم و از while استفاده نکنیم ....به شرط اینکه به do-while احتیاج نداشته باشیم