آموزش حلقه های while در سی شارپ

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

while (test)
{
کدهایی که باید نوشته شود
}

با استفاده از حلقه های do، کد بالا را تقریباً می توانیم به صورت زیر مورد استفاده قرار دهیم:

int i = 1;
while (i <= 10)
{
    WriteLine($"{i++}");
}

این کد، همان نتیجه را ایجاد می کند که حلقه ی do قبلی( احتمالاً منظور حلقه ی do در مقاله قبلی است) ایجاد می کرد؛ این حلقه، اعداد 1 تا 10 را به صورت ستونی در خروجی چاپ می کند.


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


خودتان امتحان کنید شماره 5 فصل 4

1. یک اپلیکیشن کنسول به نام Ch04Ex05 ایجاد کنید و آن را در آدرس زیر ذخیره کنید:

C:\BeginningCSharp7\Chapter04

 


2. کد را به صورت زیر اصلاح کنید(از کدهای مثال Ch04Ex04 بعنوان نقطه ی شروع استفاده کنید و به یاد داشته باشید که در انتهای حلقه ی do اصلی، دستور while را حذف کنید:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;
using static System.Convert;

namespace Ch04Ex04
{
    class Program
    {
        static void Main(string[] args)
        {
            double balance, interestRate, targetBalance;
            WriteLine("What is your current balance?");
            balance = ToDouble(ReadLine());
            WriteLine("What is your current annual interest rate (in %)?");
            interestRate = 1 + ToDouble(ReadLine()) / 100.0;
            WriteLine("What balance would you like to have?");
            targetBalance = ToDouble(ReadLine());
            int totalYears = 0;
            while (balance < targetBalance)
            {
                balance *= interestRate;
                ++totalYears;
            }
            WriteLine($"In {totalYears} year{(totalYears == 1 ? "" : "s")} " +
                      $"you'll have a balance of {balance}.");
	         if (totalYears == 0)
                    WriteLine(
                       "To be honest, you really didn't need to use this calculator.");
            ReadKey();
        }
    }
}

 3. کد را دوباره اجرا کنید اما این بار از یک target balance که کمتر از starting balance است استفاده کنید؛ همان طور که در تصویر 4.6 نشان داده شده است.

(تصویر 4.6)

 


این کدها چگونه کار می کنند

این تغییر کوچک در استفاده از حلقه ی while به جای حلقه ی do، مشکل را در آخرین مثال حل کرده است. با انتقال تست Boolean به ابتدا، شرایط را فراهم می کنیم که دیگر به حلقه ای نیاز نباشد و مستقیماً به نتیجه برسیم. البته در این شرایط، جایگزین های دیگری نیز امکان پذیر است. بعنوان مثال، ما می توانیم ورودی کاربر را چک کنیم تا مطمئن شویم که target balance بیشتر از starting balance باشد. در این صورت، ما می توانیم به صورت زیر، بخش ورودی کاربر(user input) را در یک حلقه قرار دهیم:

WriteLine("What balance would you like to have?");
do
{
  targetBalance = ToDouble(ReadLine());
   if (targetBalance <= balance)
       WriteLine("You must enter an amount greater than " +
                 "your current balance!\nPlease enter another value.");
}
while (targetBalance <= balance); 

 این برنامه، مقادیری که معنی نداشته باشند را رد می کند؛ بنابراین خروجی به صورت تصویر 4.7 خواهد بود:

(تصویر 4.7)

وقتی که می خواهیم اپلیکیشن خود را طراحی کنیم، اعتبار سنجی ورودی کاربر(user input) موضوع مهمی است. گاهی اوقات از آن به عنوان بررسی برد(range check) یاد می شود و مثال های زیادی از آن را در سراسر این کتاب مشاهده خواهید کرد.

 

برای نظردهی، در سایت عضو شوید یا به آن وارد شوید!

ستاره غیر فعالستاره غیر فعالستاره غیر فعالستاره غیر فعالستاره غیر فعال